Haki WordPress
Haki WordPress – dostaję drgawek, gdy słyszę tę nazwę, ale co poradzić… Taka się już utarła wśród polskich programistów WordPress. Osobiście wolę nazwę uchwyt WordPress choć zdaję sobie sprawę z tego, że uchwyt to coś nieco innego. Nic na to nie poradzę. Będę się trzymał tych nieszczęsnych haków. Zaczepów. „To hook something” oznacza między innymi „podpiąć coś” i to już brzmi lepiej. Ale mniejsza o to.
Haki… ech, haki pozwalają na użycie filtrów i akcji. Ta strona nauczy Cię różnych metod podpinania tych rzeczy do swojego kodu.
Przykłady haków
Poniżej zaprezentuję Wam działający kod, podpinający filtr the_title na różne sposoby. Przykład kodu modyfikującego tytuł znajdziesz na stronie o filtrach. Tam zastosowano jedną metodę, tutaj poznasz kolejne. A pierwsza, na początek, dla przypomnienia.
Haki – kod funkcyjny
W programowaniu nieobiektowym, sprawa wygląda bardzo łatwo:
1 2 3 4 5 6 |
function add_uncategorized_to_title( $title, $post_id ) { $title.= ' // Działa!'; return $title; } add_filter( 'the_title', 'add_uncategorized_to_title', 100, 2 ); |
Funkcje anonimowe
1 2 3 4 |
add_filter( 'the_title', function ( $title, $post_id ) { $title.= ' // Działa!'; return $title; }, 100, 2 ); |
Wydaje się super, prawda? Funkcje anonimowe zostały dodane w PHP 5.3 i wówczas wydawało się, że są… że wreszcie są, po prostu. Ale akurat do filtrów (i akcji) w WordPress się nie nadają. Zapytacie, dlaczego? Przecież ten kod działa! Ano działa, musi działać. Tylko jest jedno ale. Tego filtra nie da się już usunąć (w sensie – w przebiegu kodu). Aby usunąć filtr, zapoznaj się z funkcją remove_filter, tam też dowiesz się, czemu tak dodany filtr jest nieusuwalny. A tego się innym programistom po prostu nie robi.
Haki – kod obiektowy
Zainicjowana klasa
1 2 3 4 5 6 7 8 9 10 |
class FilteringTitle { public function addUncategorized( $title, $post_id ) { $title.= ' // Działa!'; return $title; } } $filtering_title = new FilteringTitle(); add_filter( 'the_title', [ $filtering_title, 'addUncategorized' ], 100, 2 ); |
Klasa inicjowana w momencie wywołania
1 2 3 4 5 6 7 8 |
class FilteringTitle { public function addUncategorized( $title, $post_id ) { $title.= ' // Działa!'; return $title; } } add_filter( 'the_title', [ new FilteringTitle(), 'addUncategorized' ], 100, 2 ); |
Ustawianie haków w klasie
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class FilteringTitle { public function __construct() { $this->process(); } private function process() { add_filter( 'the_title', [ $this, 'addUncategorized' ], 100, 2 ); } public function addUncategorized( $title, $post_id ) { $title.= ' // Działa!'; return $title; } } new FilteringTitle(); |
Metoda statyczna
1 2 3 4 5 6 7 |
class FilteringTitle { public static function addUncategorized( $title, $post_id ) { $title.= ' // Działa!'; return $title; } } add_filter( 'the_title', 'FilteringTitle::addUncategorized', 100, 2 ); |
Proszę zwrócić uwagę na to, że metoda modyfikująca jest zawsze publiczna – inaczej WordPress nie mógłby jej wywołać.
A co z akcjami?
A co ma być? Dokładnie to samo! Tylko zamiast add_filter używamy add_action.