Filtry a akce


Filtry a akce patří ve WordPressu mezi pokročilejší nástroje, ale pokud se nimi naučíte správně pracovat, přinesou vám obrovský užitek. Jak určitě dobře víte, není záhodné upravovat zdrojové kódy samotného WordPressu, protože byste si tím znemožnili aktualizace webu, z čehož by později plynulo bezpečností riziko.

Na druhou stranu pokud děláte složitější šablonu či plugin, objeví se často nutnost, nějaké základní funkcionality upravit. A díky filtrům a akcím je to proveditelné.

Akce

Díky  akcím můžete událostem přiřadit určitý script. Příklad: vždycky, když dojde k uložení příspěvku, má se něco stát. Vždycky, když dojde ke smazání kategorie, má se něco stát. Není samozřejmě možné ovlivňovat všechny možné druhy událostí, ale WordPress nabízí širokou plejádu míst, kde je toto možné použít. Ostatně, jejich seznam se nachází v Codexu.

Pro lepší přiblížení situace se můžete podívat na následující script.

function generate_excerpt($post_id, $post)
{
    remove_action('save_post', 'generate_excerpt');

    if ($post->post_excerpt == '') {
        $post->post_excerpt = substr(strip_tags($post->post_content), 0, 100);
        wp_update_post($post);
    }

    add_action('save_post', 'generate_excerpt', 10, 2);
}

add_action('save_post', 'generate_excerpt', 10, 2);

Funkce generate_excerpt je spuštěna pokaždé, když je uložen příspěvek. Jakmile tak někdo učiní, zkontroluje, zda je vyplněn excerpt příspěvku a pokud ne, pokusí se ho vygenerovat z obsahu. Povšimněte si, že tato akce je v průběhu scriptu odebrána a opět přidána. Je to kvůli tomu, ani nemohlo vzniknout nekonečné zacyklení.

Ještě vysvětlím, jaké argumenty používá funkce add_action. První agument, v našem případě save_post, je název akce, která se tzv. hookuje. Další parametr generate_excerpt je název funkce, která se má spustit. 10 je priorita. Hooky s menším číslem se spustí dříve. A 2 znamená počet argumentů, které chceme do naši funkce injectovat. V našem případě to je $post_id a $post.

Dokonce je možné si přes funkci do_action vytvářet pole pro hookování vlastních pluginů a šablon, které můžete využít vy sami či jiní vývojáři, kteří budou s vaším kódem pracovat.

Filtry

Filtry fungují na velmi podobném principu jako akce. Místo toho, abyste něco konali, pouze změníte vstup. Kupříkladu nechcete mít ve svých komentářích žádné odkazy. Text komentáře proženete filtrem a všechny je odstraníte.  Seznam míst, kde je možné filtry uplatnit, se opět nachází v Codexu.

A pro lepší pochopení uvádím příklad:

function is_important($title, $id = null)
{

    if (in_category('important', $id)) {
        return $title . " - důležité";
    }

    return $title;
}

add_filter('the_title', 'is_important', 10, 2);

Filter is_important na hookovaný na funkci, která vypisuje název článku. Díky filtru všem článkům z kategorie important připíše do titulku slovíčko důležité. Argumenty funkce add_filter jsou totožné jako u add_action. A ještě bych upozornil, že filter musí být vždy návratovou hodnotu.