Když se pořádně naučíte programovat ve WordPressu, zamilujete si nepochybně akce a filtry stejně jako já a budete jich aplikovat ve vašem kódu desítky či stovky.
To má ale několik nevýhod
- furt musíte vymýšlet, jak je pojmenovávat, a to tak, abyste je pak zas nějak našli
- přitom se ale nesmí funkce se stejným názvem opakovat, jinak dojde ke konfliktu
- mám pak někdy tunu funkcí, které se aplikují na stejnou akci/filtr a různě se kříží či dělají to samé
- nesmí se tyto funkce jmenovat stejně, jako funkce, které definovali autoři WP či pluginů.
- optimálně by měly být funkce a filtry snadno přenosné i na další weby
Za těch 10 let co s WP dělám jsem si vymyslel systém, který všechny tyto problémy řeší – pojmenovávám své akce a filtry vždy přesně podle názvu dané akce či filtru a před to používám jednotný prefix.
Např. si řeknu, že budu jako prefix vždy používat své jmého, tedy „kapler_“. Takže když chci vytvořit funkci k filtru sanitize_tile, prostě ji pojmenuji kapler_sanitize_title. Tedy funkce z minulého příspěvku by vypadala takto
function kapler_sanitize_title($title) { return str_replace('+', '-', $title); // sanitize plus with dash } add_filter('sanitize_title', 'kapler_sanitize_title');
Pointa je, že:
- nemusím přemýšlet ani vteřinu nad názvem a přitom se nikdy nebude jmenovat jako funkce někoho jiného (mé jméno je celkem unikátní)
- každý filtr či akce má vždy jednu mou funkci, tedy nemůže dojít ke konfliktu, resp. když dojde, tak vím, že už jsem tuto funkci aplikoval jinde a můžu je tak sloučit
- Tím že mám všechny filtry vztahující se k jedné proměnné u sebe, nehrozí, mnohem snadněji zkontroluji, jestli se nějak nekříží
- Takové funkce snadno přenesu i na jiné weby, protože mají prostě vždy stejnou strukturu
Teoretickou nevýhodou je snad jen ztráta té informace o tom, co daná funkce dělá z názvu funkce. Ale to jen na první pohled. Ve skutečnosti ta funkce už svým názvem prostě jasně říká, že se něco provádí s filtrem sanitize_title. A co konkrétně se provádí, to je pak definováno komentáři u těch jednotlivých úprav.
Klíčové je, že pakliže změním/rozšířím funkcionalitu, nemusím měnit název funkce, aby přesně vyjadřoval její funkčnost. Tedy když budu chtít nahrazovat nejen + ale i = za pomlčku, tak nemusím funkci přejmenovávat z „plus_to_dash“ na „plus_and_equals_to_dash“, ani nemusím vytvářet druhou funkci „equals_to_dash“ aplikovanou na stejný filtr, ani nemusím mít neodpovídající chování funkce „plus_to_dash“, kdyby dělala něco jiného, než jen „plus to dash“.
Prostě bych jen změnil nahrazování za
str_replace(array('+','='), '-', $title)