Novinka: Vizuální editor pro éru AI webů. Poslední dílek skládačky, když chcete upravovat web a ne psát e-maily. www.directedit.dev

💬

wp-config.php

Věděli jste, že díky konfiguračnímu souboru wp-config.php můžete zrychlit i zabezpečit WP web?

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.php definovat, 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_SITEURL z 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.php scriptu.
define( 'WP_CACHE', true );

Připadně tu může být nastaveno připojení pro serverové cache (Redis a pod).

Zdroje:

A ještě podrobnější seznam konstant, než je v oficiální dokumentaci:

Líbil se vám článek? Pošlete ho dál:

Jitka Klingenbergová

Jitka Klingenbergová

Absolventka ČVUT FIT oboru Informatika | Programátorka | Webová vývojářka, konzultantka a mentorka
tvorime@vyladeny-web.cz

Vaše komentáře

Zanechte první komentář

Zpět k tipům

Pravidelná dávka užitečných tipů až do schránky