Jak debugować hooki WordPress? (Lista wszystkich akcji/filtrów)
PL

Jak debugować hooki WordPress? (Lista wszystkich akcji/filtrów)

5.00 /5 - (27 głosów )
Spis treści

WordPress działa na hookach (akcje i filtry). Czasami zdarzają się nieoczekiwane rzeczy – treść znika, tytuły się zmieniają, style się psują. Podejrzewasz, że jakaś wtyczka ingeruje, ale która?

Musisz wiedzieć dokładnie jakie funkcje są podpięte pod konkretny hook (np. the_content lub wp_head).

System hooków WordPress: Zrozumienie podstaw

System hooków WordPressa sprawia, że jest on tak rozszerzalny. Każda ważna funkcja w WordPressie uruchamia hooki, pozwalając wtyczkom i motywom modyfikować zachowanie bez edytowania plików core.

Dwa typy hooków:

  1. Akcje – Robią coś w określonym punkcie (np. wp_head, the_content)
  2. Filtry – Modyfikują dane przed ich użyciem (np. the_title, the_content)

Podczas debugowania musisz zobaczyć:

  • Jakie funkcje są podpięte
  • Ich priorytety (kolejność wykonania)
  • Która wtyczka/motyw je dodała
  • Nazwy funkcji callback

Kompletny snippet do debugowania

Dodaj tę rozszerzoną funkcję do swojego functions.php:

/**
 * Inspekcja hooków WordPress ze szczegółowymi informacjami
 * 
 * @param string $hook_name Hook do sprawdzenia (np. 'the_content', 'wp_head')
 * @param bool $show_details Pokaż pełne szczegóły callback
 * @return void
 */
function wppoland_inspect_hook( $hook_name, $show_details = false ) {
    global $wp_filter;

    if ( ! isset( $wp_filter[ $hook_name ] ) ) {
        echo '<div style="background:#fff3cd; border:2px solid #ffc107; padding:15px; margin:20px 0;">';
        echo "<strong>Hook '$hook_name' nie ma podpiętych funkcji.</strong>";
        echo '</div>';
        return;
    }

    $hooks = $wp_filter[ $hook_name ];
    
    echo '<div style="background:#f8f9fa; border:2px solid #dee2e6; padding:20px; margin:20px 0; font-family:monospace;">';
    echo "<h3 style='margin-top:0;'>Hook: <code>$hook_name</code></h3>";
    
    foreach ( $hooks->callbacks as $priority => $callbacks ) {
        echo "<h4>Priorytet: $priority</h4>";
        echo '<ul>';
        foreach ( $callbacks as $callback_id => $callback ) {
            $function_name = '';
            if ( is_string( $callback['function'] ) ) {
                $function_name = $callback['function'];
            } elseif ( is_array( $callback['function'] ) ) {
                if ( is_object( $callback['function'][0] ) ) {
                    $function_name = get_class( $callback['function'][0] ) . '->' . $callback['function'][1];
                } else {
                    $function_name = $callback['function'][0] . '::' . $callback['function'][1];
                }
            }
            echo "<li><code>$function_name</code></li>";
        }
        echo '</ul>';
    }
    echo '</div>';
}

Użycie

Wywołaj funkcję w miejscu, gdzie chcesz zobaczyć podpięte funkcje:

wppoland_inspect_hook( 'the_content' );
wppoland_inspect_hook( 'wp_head' );

Ten snippet jest nieoceniony podczas debugowania problemów z WordPressem, gdzie nie wiesz, która wtyczka lub motyw modyfikuje dane.