WP HOOKS

Tworzenie własnych hooków

Jak dodawać własne do_action() i apply_filters(), aby Twoja wtyczka lub motyw były rozszerzalne.

Własne hooki sprawiają, że Twój kod staje się rozszerzalny — inne wtyczki i motywy mogą go modyfikować bez ingerencji w pliki.

Akcja: do_action()

Dodajesz punkt, w którym inni mogą wykonać własny kod:

function wpdocs_wyslij_zamowienie( $zamowienie ) {
    // przetwarzanie zamówienia...

    // powiadom inne wtyczki — przekaż obiekt zamówienia
    do_action( 'wpdocs_po_zamowieniu', $zamowienie );
}

Konsument:

add_action( 'wpdocs_po_zamowieniu', 'zapisz_do_crm', 10, 1 );

function zapisz_do_crm( $zamowienie ) {
    // zarejestruj zamówienie w zewnętrznym CRM
}

Filtr: apply_filters()

Umożliwiasz innym modyfikację wartości:

$cena = apply_filters( 'wpdocs_cena_zamowienia', $cena, $zamowienie );

Konsument:

add_filter( 'wpdocs_cena_zamowienia', 'dodaj_znizke', 10, 2 );

function dodaj_znizke( $cena, $zamowienie ) {
    if ( 'VIP' === $zamowienie['typ_klienta'] ) {
        return $cena * 0.9;
    }
    return $cena;
}

Warianty z tablicą argumentów

Gdy argumentów jest wiele lub chcesz uniknąć błędu z kolejnością:

do_action_ref_array( 'wpdocs_po_zamowieniu', array( $zamowienie, $klient ) );
$wynik = apply_filters_ref_array( 'wpdocs_dane', array( $dane, $kontekst ) );

Dokumentowanie hooków

Konwencja WordPressa wymaga bloku docblock nad do_action / apply_filters — tak dokumentujesz argumenty i wersję:

/**
 * Odpala się po utworzeniu zamówienia.
 *
 * @since 1.2.0
 *
 * @param array $zamowienie Dane zamówienia.
 * @param int   $klient_id  ID klienta.
 */
do_action( 'wpdocs_po_zamowieniu', $zamowienie, $klient_id );

Dzięki temu narzędzia takie jak wp-hooks generator wygenerują z Twojego kodu dokumentację w formacie JSON — tak jak ta witryna dla rdzenia WordPressa.

Dobre praktyki

  1. Prefiksuj nazwy (wpdocs_, nie po_zamowieniu) — unikniesz kolizji z rdzeniem i innymi wtyczkami.
  2. Udostępniaj kontekst — przekazuj obiekty, z których konsument wyciągnie, co potrzebuje.
  3. Utrzymuj stabilność — zmiana nazwy hooka lub argumentów psuje kompatybilność wsteczną.
  4. Dokumentuj argumenty w docblocku — bez tego nikt nie będzie wiedział, co odbiera callback.
  5. Zastanów się nad wariantami dynamicznymi (wpdocs_zamowienie_{$status}), gdy hook ma dotyczyć konkretnych przypadków.