wp-config.php
Soubor wp-config.php je jeden z nejdůležitějších konfiguračních souborů, které v sobě WP má. Věděli jste, že do něj můžete přidat nastavení, která mohou např. zrychlit nebo zabezpečit váš web?
Soubor najdete hned v první úrovni souborů, které se týkají WP webu (tedy tam, kde jsou např. složky wp-content nebo wp-admin). A tomto článku se podíváme na to, co užitečného se dá v souboru wp-config.php nastavit.
Výčet není úplný (ten najdete zde), ale vybrala jsem pro vás to užitečné, co by se vám mohlo hodit.
UPOZORNĚNÍ: než začnete upravovat soubor wp-config.php:
- mějte jistotu, že máte přístup na FTP k editaci souboru (protože v případně např. překlepu se k němu jinak nedostanete).
- všechny změny doporučuji přidávat na jedno místo a to nad komentář “That’s all, stop editing!…“
/* That's all, stop editing! Happy publishing. */
Debugging a logování
WP_DEBUG
Asi to nejčastější, co do wp-config.php souboru nastavit, pokud vyvíjíte weby nebo řešíte nějaký problém. Debug (ladění – analýza problému, identifikace a oprava chyb) ve WP totiž může (logovat) zapisovat chyby, kam si řeknete – na výstup (tj. přímo na obrazovku, to se hodí v případě vývoje) nebo do souboru.
Pomocí true/false můžete logování zapnout a určit, kam se bude logovat.
//this configuration: turn on the logs and save them to log file
define( 'WP_DEBUG', true ); // set true to run on the logging
define( 'WP_DEBUG_LOG', true ); // set true to log to file /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // set true to show log on website directly
define( 'SCRIPT_DEBUG', true ); // set true to show non-minified scripts
Pozn: SCRIPT_DEBUG zapíná nezmenšené verze JS a CSS souborů, což je užitečné hlavně pro vývojáře při ladění front-endových částí webu.
Pozn: V rámci nastavení serveru (nebo pluginů a dalších nastavení) může být soubor s logy umístěn i jinde než v cestě /wp-content/debug.log.
WP_DISABLE_FATAL ERROR_HANDLER
WP_DISABLE_FATAL ERROR_HANDLER umožní “vypnout” klasickou obrazovku při fatal error (“Stránka má technické potíže. Pokyny naleznete v e-mailové schránce svého správce webu.“) a zobrazit plný log s chybou.
Toto nastavení se nehodí pro produkční prostředí! Je určeno pouze pro vývojáře, protože na ostrém webu by mohli uživatelé vidět neformátovanou chybu místo uživatelsky přívětivější zprávy.
define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true ); // show full output with path to the page
Rychlost webu
AUTOSAVE_INTERVAL
WP automaticky ukládá vaši práci, abyste o ni nepřišli. Na jednu stranu je to skvělé, protože pak ztratíte jen max. poslední minutu úprav, na druhou stranu tím v databázi vznikají revize, které se pak musí čistit, a také je to nějaká zátěž na server, protože se proces musí na pozadí spustit.
Pokud tedy o automatické ukládání nestojíte, můžete tuto hodnotu zvýšit. (Autosave se netýká jen příspěvků, ale např. i úprav šablony a CSS v ní a pod).
define( 'AUTOSAVE_INTERVAL', 180 ); // in seconds
WP_POST_REVISIONS
Když už je řeč o revizích, je možné definovat, kolik verzí zpětně WP bude uchovávat. Nedoporučuji je úplně vypnout, jen omezit jejich počet (WP je pak bude mazat sám).
define( 'WP_POST_REVISIONS', 3 ); // num of revisions
define( 'WP_POST_REVISIONS', false ); // turn off revisions - not recommended
EMPTY_TRASH_DAYS
Stejně tak můžete ovlivnit, jak dlouho budou v koši smazané příspěvky (pokud koš mají). Standardně je nastaveno 30 dní.
define( 'EMPTY_TRASH_DAYS', 14 ); // 14 days
define( 'EMPTY_TRASH_DAYS', 0 ); // disable trash
Práva souborů a složek
Pro nově vytvořené složky a soubory lze nastavit práva. Vyhnete se tak chybám s právy zápisu (i když se stávají zřídka). Pro podrobné vysvětlení doporučuji přečíst dokumentaci.
define( 'FS_CHMOD_DIR', ( 0755 & ~ umask() ) ); //folders
define( 'FS_CHMOD_FILE', ( 0644 & ~ umask() ) ); //files
WP_CRON
Přesunutí WP cron (spouštěče pravidelných úloh) jsem podrobně popsala v článku “Jak zakázat WP cron“.
Ve zkratce: 1) je potřeba zakázat WP cron v souboru wp-config.php:
define( 'DISABLE_WP_CRON', true );
2) a jeho nastavení na hostingu (serveru) jako pravidelnou úlohu (každých 5-15 minut):
{https://vase-url.com}je třeba nahradit za správnou adresu webu:
{https://vase-url.com}/wp-cron.php?doing_wp_cron
V případě nastavení cronu na hostingu by bylo vhodné zakázat přímý přístup ke skriptu wp-cron.php (např. přes .htaccess).
Zabezpečení webu
WP_CONTENT_DIR
Složka wp-content obsahuje veškerý obsah, který nepatří WP jádru nebo administraci. Jsou tu tedy zdrojové soubory pluginů i šablon, nahrané obrázky, cache… vlastně vše, čím se WP weby do sebe liší (a co není uloženo v databázi). Z čehož je jasné, že umístění této složky je dost “profláklé” a poskytuje lákavé příležitosti pro různé typy lidí.
Pomocí WP_CONTENT_DIR jde tuto složku přejmenovat nebo dokonce přesunout (fyzicky na disku) na jiné místo.
Přejmenování:
define( 'WP_CONTENT_DIR', dirname( __FILE__ ) . '/my-content' ); // Cesta na serveru vzhledem k wp_config.php souboru
define( 'WP_CONTENT_URL', 'https://example.com/my-content' ); // URL složky
Přesunutí:
define( 'WP_CONTENT_DIR', '/path/to/new-folder/wp-content-any-name' ); // Cesta na serveru vzhledem k wp_config.php souboru
define( 'WP_CONTENT_URL', 'https://example.com/path-to-new-folder/wp-content-any-name' );
Je také možné přesunout složku pluginů, šablon nebo uploadovaných souborů:
define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/blog/wp-content/plugins' );
define( 'WP_PLUGIN_URL', 'https://example/blog/wp-content/plugins' );
$theme_root = WP_CONTENT_DIR . '/themes';
define( 'UPLOADS', 'blog/wp-content/uploads' );
Pozn: v případě přejmenování/přesunutí složky wp-content se může stát, že některé pluginy/šablony nebudou fungovat (pokud jejich autoři vložili do kodu cestu staticky a nikoli dynamicky).
Zakázání editace pluginů a šablon z webu
Další z možností zabezpečení je zakázat editace zdrojových kódů pluginů a šablon z administrace. Když už se vám někdo dostane do webu, tak nebude mít možnost touto cestou měnit zdrojové kódy a dělat na webu neplechu.
define( 'DISALLOW_FILE_EDIT', true );
SSL v administraci
Kdykoli půjdete na WP webu do administrace, bude se vyžadovat varianta SSL. Obecně byste měli mít nastaveno SSL na webu všude už od začátku jeho života. Tohle může být taková pojistka, pokud máte nastavené https(s) přesměrování vůbec nebo špatně.
define( 'FORCE_SSL_ADMIN', true );
WP_HTTP_BLOCK EXTERNAL
WP_HTTP_BLOCK_EXTERNAL umožnuje zablokovat externí HTTP požadavky, které WordPress může provádět (nebude moci načítat data z externích serverů nebo API)
define( 'WP_HTTP_BLOCK_EXTERNAL', true ); // disable requests from external sources
define( 'WP_ACCESSIBLE_HOSTS', 'api.wordpress.org,*.github.com' ); // this is allowed
Pozn: takové nastavení může některým pluginů zamezit volání externích knihoven nebo API třetích stran (např. komprimace obrázků mimo server a podobně).
Aktualizace
WP_AUTO UPDATE_CORE
Můžete ovlivňovat automatické aktualizace WP jádra, dokonce i jaké verze chcete (zda žádné, jen opravy, kdy se liší poslední čísla verze) a nebo všechny.
define( 'WP_AUTO_UPDATE_CORE', false ); // completely off
define( 'WP_AUTO_UPDATE_CORE', true ); //on, minor and major included
define( 'WP_AUTO_UPDATE_CORE', 'minor' ); //minor only
AUTOMATIC UPDATER DISABLED
Pokud chcete zakázat automatické aktualizace pluginů a šablon, dělá se to také v souboru wp-config.php:
define( 'AUTOMATIC_UPDATER_DISABLED', true );
Další konfigurace
WP_SITEURL
WP_SITEURL je URL, kde je (skutečně) uložena instalace WP – pro přístup k administraci.
- Je definovaná v databázi (tabulka
xx_options), je možné tuto hodnotu přetížit ve wp-config.php- pak ale počítejte s tím, že nejde přepsat z administrace webu).
- Měla by obsahovat https:// a nemá lomítko na konci.
- (Osobně nevidím mnoho důvodů, proč ji ve
wp-config.phpdefinovat, v databázi to bohatě stačí.- Definice ve wp-config.php může to mít vliv na rychlost načítání, protože je to definovaná konstanta a není třeba ji pak číst z databáze (u větších webů to může být výhodnou).
- Pokud chcete zamezit změny
WP_SITEURLz administrace webu, pak ji definujte).
define( 'WP_SITEURL', 'https://example.com' );
WP_HOME
WP_HOME definuje URL domovské stránky a odkazy na webu (ne-admin část).
- Je definovaná v databázi (tabulka xx_options), je možné tuto hodnotu přetížit ve
wp-config.php- pak ale počítejte s tím, že nejde přepsat z administrace webu).
- Měla by obsahovat https:// a nemá lomítko na konci.
- Někdy může být WP instalován např. v podložce a v tu chvíli se WP_SITEURL a WP_HOME liší.
define( 'WP_HOME', 'https://example.com' );
WP_ALLOW MULTISITE
WP_ALLOW_MULTISITE umožňuje zapnout WP do režimu multisite. Multisite vám umožní spravovat více WP webů z jedné “nadřazené” administrace. Nastavení multisite se definuje ještě na několika dalších místech – doporučuji si pročíst dokumentaci.
define( 'WP_ALLOW_MULTISITE', true );
FS_METHOD
Pomocí wp-config.php souboru je možné web “zamknout”, aby veškeré aktualizace vyžadovaly zadání přihlašovacích údajů na FTP – většina hostingů používá nastavení direct. Nedoporučuji toto nastavovat, zmiňuji to jen pro případ, že byste to potkali a potřebovali to najít. V takovém případě hledejte:
define( 'FS_METHOD', 'direct' ); //direct, ssh2, ftpext or ftpsockets
//add other needed settings
Pro úplnost uvedu i věci, které už ve wp-config.php jsou a nebo je tam automaticky dávají pluginy:
Databáze
Protože má WP data uložená v databázi, je třeba se k ní připojit, aby bylo možné si data odsud číst (a zapisovat).
define( 'DB_NAME', 'db_name' );
define( 'DB_USER', 'db_user' );
define( 'DB_PASSWORD', 'db_pass' );
define( 'DB_HOST', 'db_host' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );
Stejně tak je tu i prefix databáze. Pokud byste ho chtěli změnit, je to právě zde (v tomto souboru). Nejjednodušší a nejjistější je zvolit prefix už při instalaci a pak ho neměnit.
Pozor: pokud měníte prefix databáze, nezapomeňte změnit:
- prefixy všech používaných tabulek, u kterých je to potřeba,
- tabulku
xx_usermeta, kde je prefix uložen v datech a je ho třeba nahradit také.
$table_prefix = 'example123_'; // only numbers, letters, and _
Cache
Pluginy pro cache zapisují do wp-config.php informaci, že je cache aktivní.
- toto nastavení umožní načtení
wp-content/advanced-cache.phpscriptu.
define( 'WP_CACHE', true );
Připadně tu může být nastaveno připojení pro serverové cache (Redis a pod).
Zdroje:
- https://developer.wordpress.org/advanced-administration/wordpress/wp-config/
- https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/
A ještě podrobnější seznam konstant, než je v oficiální dokumentaci:

