WordPress – filtry a akce pro začátečníky

Na všechny weby své a svých klientů už asi 10 let používám nejpoužívanější CMS na světě – WordPress. Miluji na něm jeho snadnou modifikaci, díky které můžete snadno ze základního systému pro správu blogů udělat pokročilý systém na správu téměř jakéhokoliv obsahu, a přitom geniální zachování aktualizovatelnosti.

Základem této snadné modifikace jsou dva skvělé prvky – akce a filtry. Prakticky na každou zabudovanou funkci WP jsou aplikované nějaké akce a/nebo filtry.

Řekněme, že potřebujete upravit chování WP při tvorbě slugů – hezkých URL – z titulku příspěvku – např. chcete, aby se + symbol převáděl na pomlčku. Zjistíte (nejsnadněji vhodným dotazem na Google), že toto provádí interně funkce sanitize_title.

A teď – mohli byste jí upravit, ale pak by jste o tuto úpravu přišli při příští aktualizaci WP. Nebo kdyby WP byl plně objektový systém, byste mohli tuto funkci přepsat vlastní funkcí, ale to by často znamenalo, že byste museli zkopírovat celou větší funkci, jen kvůli malé změně, a když by se tato funkce ve wordpressu měnila, museli byste si dávat pozor, aby ta vaše držela krok.

Místo toho má WP právě filtry a akce:

  • filtry mají na vstupu nějakou hodnotu (typicky text) a vy navázáním vaší funkce na tento filtr můžete tuto hodnotu změnit.
  • akce mají jen své místo a prioritu a vy navázáním své funkce na danou akci můžete na daném místě provést vlastní akci – typicky něco vypsat.

Takže zpět k našemu příkladu. Funkce sanitize_title má před výstupem na sebe nevázán filter, který se jmenuje také sanitize_title (není vždy pravidlem, že se shodují, záleží s čím pracují).

Vy tak můžete do svého tématu (např. do svého souboru s funkcemi functions.php) napsat následující volání tohoto filtru:

function plush_to_dash($title) {
    return str_replace('+', '-', $title);
}
add_filter('sanitize_title', 'plus_to_dash');

Řádek add_filter aplikuje váš filtr definovaní funkcí „plus_to_dash“ na filtr, který se jmenuje sanitize_title a který je aplikovaný v kódu u funkce sanitize_title na proměnou $title. Vaše funkce plus_to_dash tak bere na vstupu tuto jednu proměnou a nahradí v ní plus za pomlčku a výsledek vrátí.

Podobně fungují akce, které však nepracují s hodnotou, ale jen s místem, kde jsou umístěné. Tedy např. akce wp_head:https://codex.wordpress.org/Plugin_API/Action_Reference/wp_head je zodpovědná za vypsání veškerého obsahu do hlavičky vašeho webu. Když tedy budete chtít do hlavičky třeba vlastní styl, uděláte to nějak takto:

add_action('wp_head','hook_css');

function hook_css()
{

$output="<style> .wp_head_example { background-color : #f1f1f1; } </style>";

echo $output;

}

A pointa je, že akce i filtry je možné nejen přidávat, ale i odstraňovat a tím můžete snadno změnit i výchozí chování WordPressu. Toho docílíte snadno funkcemi remove_action resp. remove_filter.

Např. řekněme, že se vám nelíbí, že WordPress na výstupu automaticky převádí pevné odřádkování v obsahu příspěvku na odstavce. Dělá to tak, že aplikuje funkci wpautop na filter the_content.  Tedy není nic snazšího, než tento filtr odstranit:

remove_filter( 'the_content', 'wpautop' );

 

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *