S čím vám můžeme pomoci?

Jak hromadně vyhledat a nahradit text v databázi

Jak v databázi nahradit text ve všech řádcích najednou, například starou doménu za novou, a proč u WordPressu nestačí obyčejný SQL dotaz.

Obsah návodu
  1. Proč je WordPress zvláštní případ
  2. WordPress: plugin Better Search Replace
  3. WordPress: WP-CLI
  4. Obyčejné tabulky: SQL dotaz
  5. Nejčastější chyby

Hromadnou náhradu textu v databázi potřebujete nejčastěji při změně domény, přechodu z http:// na https:// nebo při přesunu webu z dočasné adresy. Ruční úprava stovek řádků nepřipadá v úvahu, řešení je buď SQL dotaz, nebo u WordPressu specializovaný nástroj. Volba záleží na tom, jak jsou data v databázi uložená.

Upozornění

Náhradu nelze vrátit zpět. Před jakoukoli změnou databázi exportujte podle návodu Jak exportovat databázi?.

Proč je WordPress zvláštní případ

WordPress a řada jeho pluginů ukládají nastavení jako takzvaná serializovaná data. Jde o text, který obsahuje i délku každé hodnoty, například s:22:"http://stara-domena.cz". Pokud text nahradíte obyčejným SQL dotazem a nová hodnota má jinou délku, uložená délka přestane odpovídat a WordPress data zahodí. Projeví se to ztrátou nastavení šablony, widgetů nebo pluginů. Proto u WordPressu používejte nástroj, který serializovaná data rozpozná a délky přepočítá.

WordPress: plugin Better Search Replace

  1. V administraci přejděte do Pluginy → Instalace pluginů, vyhledejte Better Search Replace, nainstalujte a aktivujte.
  2. Otevřete Nástroje → Better Search Replace.
  3. Do pole Search for zadejte hledaný text (například http://stara-domena.cz), do pole Replace with nový text (https://nova-domena.cz). Zadávejte adresy bez lomítka na konci.
  4. V seznamu Select tables označte všechny tabulky (Ctrl+A nebo Cmd+A).
  5. Ponechte zaškrtnuté Run as dry run? a klikněte na Run Search/Replace. Plugin jen spočítá, kolik výskytů by změnil.
  6. Pokud výsledek odpovídá očekávání, volbu Run as dry run? odškrtněte a spusťte náhradu znovu.

Pokud se do administrace nedostanete (web po změně domény přesměrovává), upravte nejdříve řádky siteurl a home v tabulce wp_options přes phpMyAdmin a poté spusťte plugin.

WordPress: WP-CLI

Pokud máte přístup k příkazové řádce s nástrojem WP-CLI, stejnou práci udělá jeden příkaz spuštěný v kořenové složce webu:

wp search-replace 'http://stara-domena.cz' 'https://nova-domena.cz' --all-tables --dry-run

Přepínač --dry-run pouze vypíše počet nalezených výskytů. Po kontrole ho odstraňte a příkaz spusťte znovu. WP-CLI serializovaná data zpracuje správně.

Obyčejné tabulky: SQL dotaz

U vlastní aplikace nebo tabulek bez serializovaných dat stačí SQL dotaz v phpMyAdmin (viz Jak se přihlásit do phpMyAdmin a základní orientace).

  1. V levém panelu klikněte na databázi a otevřete záložku SQL.
  2. Nejprve si ověřte rozsah změny dotazem, který jen počítá řádky:
    SELECT COUNT(*) FROM tabulka WHERE sloupec LIKE '%stare%';
  3. Poté spusťte náhradu:
    UPDATE tabulka SET sloupec = REPLACE(sloupec, 'stare', 'nove');
  4. Klikněte na Proveď. phpMyAdmin vypíše počet změněných řádků.

Dotaz upravuje jeden sloupec jedné tabulky. Pro každou další kombinaci tabulky a sloupce ho spusťte znovu. Funkce REPLACE rozlišuje velká a malá písmena podle porovnávání sloupce, u běžného utf8mb4_unicode_ci je nerozlišuje.

Tip

Hledaný text volte co nejpřesněji. Náhrada stara-domena.cz zasáhne i e-mailové adresy info@stara-domena.cz. Pokud to nechcete, hledejte včetně protokolu, například https://stara-domena.cz.

Nejčastější chyby

  • Po náhradě zmizelo nastavení šablony nebo widgety. Poškodila se serializovaná data. Obnovte databázi ze zálohy a použijte Better Search Replace nebo WP-CLI.
  • Dotaz nic nezměnil. Hledaný text neodpovídá přesně (jiné lomítko, www, protokol). Ověřte jej dotazem SELECT.
  • Web po náhradě stále zobrazuje starou adresu. Vymažte cache pluginu a prohlížeče, případně zkontrolujte WP_HOME ve wp-config.php.

Nenašli jste co hledáte?

Obraťte se na nás.
Odpovíme nejpozději do 24 hodin.

Napsat podpoře