Priorytety i argumenty
Jak sterować kolejnością wykonywania callbacków i jak poprawnie deklarować liczbę argumentów.
Priorytety
Trzeci parametr add_action() / add_filter() to priorytet — liczba całkowita (domyślnie 10). Niższa wartość = wcześniejsze wykonanie. Callbacki o tym samym priorytecie wykonują się w kolejności rejestracji.
add_action( 'wp_head', 'pierwsza', 5 ); // wykona się pierwsza
add_action( 'wp_head', 'druga', 10 ); // wykona się druga (domyślny priorytet)
add_action( 'wp_head', 'trzecia', 99 ); // wykona się ostatnia
Typowe zastosowania:
- wysoki priorytet (np.
999), gdy chcesz działać po wszystkich innych wtyczkach, - niski priorytet (np.
1), gdy musisz zadziałać przed nimi, - w filtrze — modyfikacja wartości, zanim zrobi to ktoś inny.
// nadpisz po wszystkich: przywróć własną długość zajawki
add_filter( 'excerpt_length', 'moja_dlugosc', 999 );
function moja_dlugosc( $length ) {
return 30;
}
Liczba argumentów
Czwarty parametr deklaruje, ile argumentów callback ma przyjąć. Jeśli podasz więcej niż 1, musisz ustawić ten parametr — inaczej otrzymasz tylko pierwszy argument.
// save_post przekazuje 3 argumenty: $post_id, $post, $update
add_action( 'save_post', 'obsluz_zapis', 10, 3 );
function obsluz_zapis( $post_id, $post, $update ) {
// $post_id, $post i $update są dostępne
}
Liczbę argumentów hooka znajdziesz na każdej stronie tej dokumentacji w polu Argumenty.
Dodatkowe parametry filtrów
Filtry często dostarczają argumenty „pomocnicze”, które nie są filtrowaną wartością:
// the_title przekazuje: $title (filtrowana wartość) i $post_id (kontekst)
add_filter( 'the_title', 'mod_tytul', 10, 2 );
function mod_tytul( $title, $post_id ) {
if ( 'produkt' === get_post_type( $post_id ) ) {
return 'Produkt: ' . $title;
}
return $title;
}
Kolejność ładowania WordPressa
Znajomość kolejności hooków pomaga wybrać właściwy moment:
mu-plugins -> plugins_loaded -> after_setup_theme -> init -> wp_loaded
-> wp -> template_redirect -> wp_head -> pętla -> wp_footer -> shutdown
Kilka zasad:
init— rejestracja typów treści, taksonomii, shortcodeów,wp_enqueue_scripts— style i skrypty na froncie,admin_enqueue_scripts— style i skrypty w panelu,template_redirect— przekierowania i blokowanie dostępu,shutdown— kod po wysłaniu odpowiedzi.
Zmienne hooki
Wiele hooków zawiera w nazwie zmienną — fragment oznaczony {$...}. Pozwala to ograniczyć działanie do konkretnego przypadku:
// zadziała tylko dla wpisów typu book
add_action( 'save_post_book', 'obsluz_ksiazke', 10, 3 );
// zadziała tylko przy odczycie opcji blogname
add_filter( 'option_blogname', 'zmien_nazwe' );
Na stronie takiego hooka znajdziesz listę aliasów — konkretnych nazw, które WordPress faktycznie wywołuje.