WordPress – tvorba šablony od A do Z – 18.díl – Filters


Zdravím všechny své čtenáře našeho seriálu o tvorbě WordPress šablon. Dnes jsem se opět rozhodl urvat od pracovní činnosti a konečně jít dělat něco, co mě taky baví. Takže mám tu dnes pro Vás další díl ! V minulém díle jsme se řekli něco o action hooks a dnes bychom se podívali na velmi podobnou věc, ale s tím rozdílem, že náš kód dovolíme ovlivnit i prostřednictvím vrácených dat do funkce, kde je filtr aplikován.

WordPress Apply Filter

Stejně jako Actions nám Filtry umožňují ovlivnit výsledný kód, který nějaký plugin, šablona nebo funkce ve finále provede. V minulém díle jsme pomocí Actions mohli v určitou chvíli zavolat nějakou funkci, která mohla něco provést. Neměli jsme však možnost, pomocí těchto funkcí ovlivnit úplně výsledné data, které nějaká funkce vyprodukuje. Pojďme si ukázat jednoduchou a jasnou ukázku použití filtru.

Základní sadou funkcí jsou:

apply_filters() – definuje a aktivuji filter, který vrací data do proměnné, kterou následně používám ve své funkci.

add_filter() – Definovaný filter používám a vracím ovlivňuji data svou napsanou funkcí.

Ukázka použití WordPress filtrů


<?php

// Nějaká funkce volána při inicializaci WordPressu, která má v těle aplikován filter

add_action('wp', 'kt_set_post_type_with_seo_module');

function kt_set_post_type_with_seo_module(array $post_types){

	$post_types = array('post');

	$post_types = apply_filters('kt_setup_post_type_for_seo_modul', $post_types);

	foreach($post_types as $type){
		// udělej něco s každou položkou v poli $post_types
	}

}

// Námi zapsaný kód, který přidá do $post_types další položky bez toho, že bychom editovali originální kód.

add_filter('kt_setup_post_type_for_seo_modul', 'kt_add_new_post_type_to_seo_module');

function kt_add_new_post_type_to_seo_module($post_types){
	$post_types[] = 'pages';
	$post_types[] = 'movie';

	return $post_types;
}

?>

Zde jsem připravil nějaký všeobecný příklad. Pokusím se trochu vysvětlit kód. Dejme tomu, že existuje nějaký plugin nebo Váš vlastní modul, který má zapsanou funkci – kt_set_post_type_with_seo_module(). Tato funkce prochází pole post_typů a v cyklu s nimi něco provádí – není již důležité co. Tato funkce se volá při inicializaci WordPressu a modul se aplikuje pouze na post_type = post – tedy pouze pro příspěvky. Protože má funkce zapsaný filter  s názvem – kt_setup_post_type_for_seo_modul, můžeme tedy data vstupující do cyklu ovlivnit. Napíšeme si vlastní funkci – klidně v jiném souboru nebo pluginu a aplikujeme jí do filtru. Naše funkce musí pouze přebírat potřebný parametr $post_types do kterých následně přidáme dva nové – Stránky a custom post type – movie. Data pak již následně vrátíme.

Zde jsem napsal velmi ale opravdu velmi jednoduchý příklad. Celý kód by se měl osadit určitě kontrolním mechanismem, zda se nám určitě vrátilo opět pole, které chceme procházet nebo zda se nám vůbec něco vrátilo. To již ale není úplně předmětem tutoriálu a předpokládám, že vývojáři již tyto základní podmínky v našem seriálu znají.

Při používání filtrů se není třeba omezit pouze na pole. Můžeme vracet klidně výsledný text, který se následně bude echovat, můžeme vracet celé objekty, těm zavolat řadu funkcí, které objekt ovlivní a poslat ho zpět změněný, atd.

Filtry ve WordPressu

Není třeba se také omezovat pouze na filtry, které jste sami napsali. WordPress jich má nepřeberné množství a velmi často krokuji funkce WordPressu a tyto filtry hledám, protože občas zákazník potřebuje WordPress „ohnout“ k své podobě a filtrů tam vývojáři „nastrkali“ až jéje. Musím ale říct, že jsem se za svou praxi již setkal s případem, kdy jsem něco v jádře WordPressu potřeboval změnit, ale nebyl pro to sepsán filtr a bohužel jsem musel říct, že toto ve WordPressu není možné.

Závěrem

Protože filtry jsou velmi podobné jako action hooky, dnes se moc rozepisovat nebudu. Jedná se o velmi podobnou funkci pouze s tím rozdílem, že ve filtrech se dá používat return dat, které chceme do nějaké jiné funkce poslat. Měli byste filtry osazovat s dobrou rozvahou stejně jako action hooky. Velmi těžko se zde dají vymyslet nějaké modelové příklady, protože použití filtrů je velmi všeobecné a je na individuálním přístupu vývojáře, co filtry osadí a tím tak umožní drobnou „editaci“ kódu.

Tomáš Kocifaj, KTStudio.cz

, ,

Komentáře jsou uzavřeny.