WP HOOKS

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.