Migrace WordPress webu pomocí “search and replace”

WordPress můžeme migrovat dvěma způsoby. Prvním je se změnou doménu, druhý pouze jako změnu webhostingu. My si zde ukážeme, proč a jak využít search&replace při migraci u obou scénářů.

K migraci není třeba instalovat žádné šílené pluginy typu Duplicator aj., se kterým jsem měl zkušenost, že dokázal nadělat více škody než užitku, pokud uživatel nedokázal zpětně chybu diagnostikovat.

Našim cílem bude aktuálně samozřejmě zmigrovat stránku tak, aby i interní odkazy směrovaly na novou doménu / novou cestu, ne pouze záměnu WordPress Address a Site Address v tabulce wp_options.

Metoda s využítím CLI pro export databáze

Při využití CLI se nemusíme bát, že by došlo k rozhození serializovaných dat. Běžně se setkávám s tím, kdy uživatel při migraci přišel o data, protože v běžném editoru adresu nahradil pomocí funkce Najít a změnit.

Pole serializovaných dat může vypadat následovně.

['url' => 'www.example.cz'] => a:1:{s:3:"url";s:14:"www.example.cz";}

Kde by běžný search&replace z tohoto pole udělal

a:1:{s:3:"url";s:14:"www.nova-domena-example.cz";}

A při převodu zpět do pole již nesedí kontrolní součet, tedy “www.nova-domena-example.cz” není string o 14 znacích. Dostáváme se do situace, kdy plugin není schopen data opět použít.

Proto využijeme CLI WordPressu.

1) Pokud máte vlastní server, jistě znáte SSH, avšak dnes již i spousta webhostingů nabízí přístup k hostingu přes SSH, do kterého se přihlásíme běžně pomocí příkazového řádku / powershellu nebo terminálu.

ssh uzivatel@192.168.1.1 -p 00000

Přičemž tedy uzivatel je vygenerované uživatelské jméno Vašeho webhostingu, stejně tak IP adresa a volitelný příznak -p jako port pro ssh, který není nutno použít, běžně výchozí je 22.

2) Po přihlášení do SSH získáme poslední verzi WP-CLI příkazem:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Ověřit instalaci můžeme následně pomocí:

wp cli version

Nyní provedeme export databáze pomocí příkazu:

wp search-replace '//example.dev' '//example.com' --precise --recurse-objects --all-tables --export="export.sql"

V tuhle chvíli na webhostingu pomocí FTP nalezneme vytvořený soubor export.sql, který obsahuje kompletní databázi připravenou k migraci na nový webhosting.

Pozn.: example.dev je původní doména, example.com nová.
Pozn. 2: Můžete domény nahradit rovnou s http/https, v uvedeném příkladu zůstává původní stav.

Přesun, pokud webhosting nenabízí SSH

Jmenovitě například u nás nejrozšířenější webhosting Wedos bohužel svým uživatelům nedovoluje přístup přes SSH ke svému webhostingu. Je třeba využít alternativní cesty.

1) Do původní instalace WordPress přidáme plugin “WP Migrate Lite”, který je ke stažení na této adrese.
https://cs.wordpress.org/plugins/wp-migrate-db/

2) Po instalaci se dostaneme k pluginu přes Nástroje -> WP migrate

3) V kartě Migrate, zvolíme Export Database, vyplníme řádek následujícím způsobem.

4) Kliknutím na tlačítko Export database dostaneme stejný výstupní soubor jako v prvním případě. 
Plugin v podstatě spouští stejnou funkci, jakou můžeme získat pomocí CLI.

Dokončení migrace

Nyní překopírujeme soubory instalace WordPressu pomocí Vámi oblíbeného FTP klienta – například FileZilla. 

Vyplníme nové přístupové údaje k databázi v souboru wp-config.php.

Vygenerovaný soubor můžeme do databáze nahrát nejčastějším způsobem pomocí PhpMyAdmin a nebo opět pomocí CLI.

wp db import "export.sql"

 

Pokud je to nutno, upravíme DNS záznamy a vše by mělo být plně funkční nehledě na tom, jaký editor/plugin je využit na instalaci.

Závěr

Určitě doporučuji vždy používat tuhle metodu pro přenos databáze a celého webu stavěném na WordPressu. Není třeba zbytečných obrovských pluginů, které slibují migraci, většinou je to jenom další způsob, jak vytvořit chybu při přenosu. Proč tohle riskovat, když je to takhle jednoduché.

Wordfence a jiné pluginy využívající cestu

Může se stát, pokud využíváte plugin, který k nějaké své funkci pracuje s absolutní cestou k instalaci WP, tak po dokončení přenosu bude následovat chyba, že některý z požadovaných souborů nebyl od požadované absolutní cesty nalezen.

Zde doporučuji plugin kompletně buďto deaktivovat, smazat jeho dodatečné informace v .htaccess a wp-config.php a provést instalaci znovu.

Nebo je třeba migrovat i absolutní cestu přidáním další proměnné k migraci.

Absolutní cestu lze u hostingu zjistit například v infu o webhostingu a nebo to umí PHP funkce, kde do kořenového adresáře vytvořte náhodný soubor – např. dir.php.
Do něj vložte kód.

<?php
echo getcwd();
?>
Další využití search-replace

Bez parametru –export můžete search-replace využívat i na jakékoliv jiné změny v databázi na aktuálních datech, ať se jedná o jedno slovo, odkazy aj.

Zde přikládáme kompletní dokumentaci k příkazu.

wp search-replace