Napřed trochu průpravy pro začátečníky. Rozhodně nestačí použít nástroj Export/import ve WordPressu (budou chybět obrázky, adresy povedou na stará umístění). Nestačí ani přesunout pouze samotná data, musí se přesunout i databáze. Zde je kamenem úrazu to, že v ní je napevno vepsaná URL adresa WordPressu i aktuální pracovní adresář.
Dobře. Přehrajeme tedy kompletní data našeho redakčního systému ze starého hostingu na nový či z testovací verze na ostrou. Jak teď vyřešit migraci databáze? Máme dvě varianty:
Poznámka: První varianta je vhodná i pro začátečníky, dál ale článek počítá s pokročilejší znalostí WordPressu.
Tato varianta se hodí pro jednorázový přesun, například potřebujete-li svůj blog přesunout na novou doménu.
Nainstalujte si do svého WordPressu plugin WP Migrate DB. Veškeré kouzlo se poté stane v administraci v nástrojích na stránce pluginu. Můžete zde totiž hromadně nahradit potřebné údaje, zmíněnou URL adresu a pracovní adresář, a vyexportovat upravenou databázi. Až vyplníte nové údaje, klikněte na tlačítko Migrate. Začne se vytvářet export databáze, což v případě malého webu zabere jen několik vteřin.
Nápověda: Neznáte-li aktuální pracovní adresář, vytvořte si soubor info.php a do něj vložte následující:
<?php echo getcwd();
Po uložení jej nahrajte na nové místo, kam přesouváte svůj WordPress. V prohlížeči se podívejte na tento soubor (např. example.com/info.php). Toto je pracovní adresář, který zkopírujte a vložte na požadované místo.
Export nahrajte do nové databáze (nevíte-li si rady, vyzkoušejte Adminer), poté již jen nezapomenout na přepsání přístupových údajů pro databázi ve wp-config.php a máte hotovo!
Plugin má i svou placenou verzi (WP Migrate Pro), ve které se stává ideálním pro pravidelné přesouvání wordpressového webu, např. z testovací verze na produkční a naopak. Na obou verzích nainstalujete a zaktivujete plugin, spárujete je pomocí kódu, který plugin vygeneruje, a máte vytvořený one-click přesun databáze. Nevýhodou je však vysoká pořizovací cena (100 dolarů pro osobní použití, ještě více pak pro vývojáře). Chcete-li se vyhnout takovému výdaji, nic není ztraceno, s následující variantou lze přesouvání WordPressu také zrychlit (ač ne zcela automatizovat).
V praxi tato varianta znamená, že musíme WordPress upravit tak, aby hledal např. váš obrázek pod adresou /wp-content/uploads/fotka.jpg namísto www.example.com/wp-content/uploads/fotka.jpg. Díky tomu odpadne povinnost jakkoliv modifikovat databázi pro přesun.
Plugin Root Relative URLs toto umí zařídit. Nebojte se upozornění, že je plugin starý, stále funguje. Po instalaci jej však neaktivujte! Napřed je třeba přidat následující řádky do wp-config.php (jestli nevíte kam přesně, vložením nad řádek s /* That’s all, stop editing! Happy blogging. */ nic nezkazíte.
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_CONTENT_URL', '/wp-content');
define('DOMAIN_CURRENT_SITE', $_SERVER['HTTP_HOST']);
Pak plugin aktivujte a ještě zaktualizujte v nastavení redakčního systému dvakrát trvalé odkazy. Databázi WordPressu nyní můžete jednoduše vyexportovat, klidně i pomocí varianty výše, odpadá ale povinnost cokoliv přepisovat.
Pozor: Plugin Root Relative URLs může přepsat do relativní podoby i některé nechtěné adresy – např. máte-li nainstalovaný nějaký další plugin pro sharovací tlačítka, který si tahá script z Facebooku. Najednou váš web začne hledat script z Facebooku na vašem serveru. To lze ale opravit na obecné stránce nastavení v administraci, kde můžete vkládat adresy, které nechcete učinit relativními.
Řekněme, že na testovací verzi webu jsme aktualizovali WordPress. Nyní je čas ji přesunout na ostrou. Jistě jste si všimli, že povinnost přepisovat přihlašovací údaje pro databázi ve wp-config.php neodpadla. S jednoduchou metodou od Jonathana Suha si můžeme i toto odpustit.
Myšlenka je taková, že si vytvoříme pro každé prostředí webu jeden konfigurační soubor nejen s různými databázovými údaji. Můžeme – měli bychom – si v nich zvlášť nastavit např. wp_debug, salts atd. Tyto soubory si budeme volat do wp-config.php podle toho, na jaké adrese se zrovna nacházíme. Jak na to? Napřed jak bude vypadat náš nový wp-config:
<?php // nastavení všech prostředí, ve kterých web může běžet $environments = array( 'local' => 'example.local', 'development' => 'development.example.com', 'production' => 'example.com' ); // získání současné URL adresy $http_host = $_SERVER['HTTP_HOST']; // projde všechny prostředí a najde shodu foreach($environments as $environment => $hostname) { if (stripos($http_host, $hostname) !== FALSE) { define('ENVIRONMENT', $environment); break; } } // pokud shoda nenastane, ukáže se chybová hláška if (!defined('ENVIRONMENT')) exit('Pro toto prostředí není nakonfigurována žádná databáze.'); // najde soubor s konfigurací (o tom ještě níže) $wp_db_config = 'wp-config/wp-db-' . ENVIRONMENT . '.php'; // pro jistotu kontrola, jestli soubor s konfigurací existuje if (file_exists(__DIR__ . '/' . $wp_db_config)) { require_once($wp_db_config); } else { // pokud neexistuje hledaný soubor exit('Pro toto prostředí nebyla nalezena konfigurace databáze.'); } // zbytek souboru wp-config.php /* That’s all, stop editing! Happy blogging. */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php');
Nyní k samotným konfiguračním souborům. Příklad výše počítá s tím, že vytvoříte složku wp-config v rootu své instalace WordPressu. V té pak vytvoříte jednotlivé soubory podle výše nastavených prostředí (s předponou wp-db-, např. tedy wp-db-production.php). Samotný obsah souboru, který je vlastně stejný jako by byl ve wp-config, bude vypadat takto:
<?php
// zakazuje přistupování k souboru přímo
if (!defined('ABSPATH')) exit();
// přístup do databáze
define('DB_NAME', 'database');
define('DB_USER', 'username');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
// zde generátor https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', 'vaše unikátní fráze');
define('SECURE_AUTH_KEY', 'vaše unikátní fráze');
define('LOGGED_IN_KEY', 'vaše unikátní fráze');
define('NONCE_KEY', 'vaše unikátní fráze');
define('AUTH_SALT', 'vaše unikátní fráze');
define('SECURE_AUTH_SALT', 'vaše unikátní fráze');
define('LOGGED_IN_SALT', 'vaše unikátní fráze');
define('NONCE_SALT', 'vaše unikátní fráze');
// prefix tabulek v databázi
$table_prefix = 'wp_';
// budou se zobrazovat chyby a varování?
define('WP_DEBUG', false);
Toť vše. Po tomto nastavení můžete weby konečně rychle přesouvat a nemusíte neustále spravovat nějaké přístupové údaje.