cz
cz
Zpět

Jak přesunout WordPress?

tvorba webových stránek wordpress
Web - 10th Červen 2015
Napsal/a Lukáš Kraft

Přesunutí WordPressu do nového umístění je jednoduchý úkol, se kterým si však začátečník nemusí vědět rady. I pokud jste profesionál a louskáte weby na WordPressu jeden za druhým, vždy jde proces přesunutí o něco vylepšit. Ukážeme si několik variant přesunu i pár tipů na usnadnění tohoto úkonu.

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.

1. Přepsat adresu a pracovní adresář v databázi a přesunout jí.

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).

2. Vytvořit si WordPress s relative rootem a přesunout databázi.

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.

Jak si to ještě zjednodušit?

Ř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.

A co vy? Máte nějaké tipy, jak přesouvání wordpressových instalací ještě více zjednodušit? Či používáte úplně jinou metodu pro migraci, než my v Pixelfieldu?
Profilový obrázek
Napsal/a
Lukáš Kraft
Podobné příspěvky
Prioritizace pro startupy krok za krokem: PriX metoda pro plánování releasů
Design | Mobil | Web - 3rd Duben 2020
Napsal/a Tým Pixelfield
Jak využít AR v marketingu: Kompletní průvodce rozšířenou realitou v kampaních
Design | Marketing | Mobil | Web - 27th Březen 2020
Napsal/a Tým Pixelfield