Vyhledávání a nahrazování v databázi WordPressu
WordPress neukládá adresu Vašeho webu na jednom místě. Je uvedena v nastavení, ale také doslova ve Vašich příspěvcích, u obrázků a v nastavení šablon, pluginů a widgetů. Pokud adresu změníte, musíte ji proto nahradit v celé databázi. Zde se dočtete, jak to udělat bezpečně a proč může obyčejný SQL příkaz Váš web rozbít.
Kdy to potřebujete?
- Váš web běžel na http a nyní běží na https, a vidíte smíšený obsah (stránka na https, která načítá části přes http). Viz také Chybí zámek nebo hlášení „nezabezpečeno“: řešení smíšeného obsahu (mixed content).
- Stěhujete web na jinou doménu, nebo z dočasné adresy na Vaši skutečnou doménu.
- Ručně jste vytvořili kopii na jiné adrese, například testovací web.
Pokud web klonujete pomocí Installatronu nebo Website Manageru, adresy v kopii upraví sám. Viz Klonování a vytvoření testovacího prostředí (staging). Pokud se jen stěhujete k jinému hostingu se stejnou doménou, nemusíte nic měnit.
Proč ne holý SQL REPLACE?
V phpMyAdmin můžete jedním SQL příkazem nahradit všechny texty. U adres to nedělejte. Mnoho nastavení je uloženo serializovaně: PHP k nim připisuje délku každého textu. Vypadá to takto:
s:27:"http://example.com/logo.png";
s:27 znamená: zde následuje text o 27 znacích. Pokud z toho uděláte https://, bude text dlouhý 28 znaků, ale stále tam bude uvedeno 27. PHP pak hodnotu nedokáže přečíst a nastavení tiše zmizí. Uvidíte pak například prázdné menu, zmizelé logo nebo chybějící widgety. Použijte proto nástroj, který tyto délky aktualizuje.
Nejprve zálohu
Vyhledávání a nahrazování se provede okamžitě a nemá koš. Předem si vyexportujte databázi, viz Export databáze, nebo jedním kliknutím vytvořte dodatečnou zálohu ve WebOké Backups, viz WebOké Backups: zobrazení, obnovení nebo stažení zálohy.
Způsob 1: WP-CLI v Terminálu nebo přes SSH
WP-CLI je oficiální nástroj příkazové řádky pro WordPress. U nás jej používáte jako příkaz wp v Terminálu DirectAdminu nebo přes SSH. Ten máte k dispozici pouze v balíčcích s SSH. O které balíčky jde, se dočtete v článku Terminál ve Vašem prohlížeči.
- Otevřete Terminál a přejděte do složky Vašeho WordPressu:
cd domains/example.com/public_html - Nejprve se podívejte, co by se změnilo, aniž byste cokoli upravili:
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run
U každé tabulky uvidíte, kolik nahrazení by proběhlo. - Pokud to odpovídá, spusťte stejný příkaz bez
--dry-run.
Několik voleb v příkazu:
- Bez další volby pracuje WP-CLI s tabulkami, které WordPress zná. Pokud plugin používá vlastní tabulky se stejnou předponou (například
wp_), přidejte--all-tables-with-prefix. Volba--all-tableszasáhne všechny tabulky v databázi, i ty, které náhodou patří jinému webu. --skip-columns=guidponechá beze změny sloupecguids pevnými identifikátory příspěvků. WordPress doporučuje jej nikdy neměnit, jinak čtečky kanálů zobrazí staré příspěvky znovu jako nové.- Pokud se u složitých nastavení něco pokazí, použijte
--precise, které je pomalejší, ale důkladnější.
Způsob 2: plugin
Pokud nemáte Terminál ani SSH, použijte plugin pro vyhledávání a nahrazování, který podporuje serializovaná data. Několik takových najdete v adresáři pluginů na wordpress.org. Při výběru si přečtěte popis: musí v něm být uvedeno, že serializovaná data zpracovává správně. I zde nejprve použijte zkušební režim, pokud jej plugin má, a po dokončení plugin odstraňte. Viz také Výběr, hodnocení a úklid pluginů WordPress.
http:// nebo https:// na začátku. Pokud nahradíte pouze example.com, změníte také e-mailové adresy jako info@example.com a další texty, ve kterých se název vyskytuje. Dejte pozor i na lomítko na konci: pokud nahradíte https://example.com/ za https://example.net, adresy se slepí dohromady.Pouze adresa WordPressu a adresa webu?
Nemůžete se po změně dostat do administrace, protože Vás WordPress přesměrovává na špatnou adresu? Pak nejprve upravte pouze řádky siteurl a home v tabulce wp_options (předpona wp_ se u Vás může lišit). Jde o obyčejné texty, které můžete v phpMyAdmin změnit. Jak na to, se dočtete v článku Otevření a používání phpMyAdmin. Zbytek pak proveďte pomocí WP-CLI nebo pluginu.
Po dokončení
- Vyprázdněte mezipaměť Vašeho cache pluginu a prohlížeče.
- Pokud stránky vracejí chybu 404, jednou uložte nastavení v Nastavení > Trvalé odkazy. Viz Můj web po nahrání nebo přestěhování nefunguje.
- Zkontrolujte několik stránek, menu, logo a formulář. Pomocí F12 se v konzoli podívejte, zda se tam ještě nezobrazují hlášení o smíšeném obsahu.
Další čtení
- wp search-replace na developer.wordpress.org (anglicky)
- Ruční přestěhování WordPressu: soubory, databáze a wp-config.php
Chcete se dozvědět víc? Projděte si bezplatný kurz WordPressu, lekci 3.2 www, přesměrování a smíšený obsah nebo lekci 9.5 Přestěhování webu WordPress.
