
Jak debugować hooki WordPress? (Lista wszystkich akcji/filtró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:
- Akcje – Robią coś w określonym punkcie (np.
wp_head,the_content) - 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.