在查看有些主題的代碼的時候,我們經常會看得一頭霧水,命名代碼里面是很干凈的,沒有特殊的功能函數,但是前臺輸出的代碼就是多了一些我們不想要的東西,這很可能就是主題作者把相應的功能掛載到WordPress的hook上面了。但是到底是掛在到哪個hook上的,或者說一個hook上到底掛載了哪些功能,一點一點的都代碼去查找是在是太慢了,今天給大家分享一個比較便捷的方法。
列出所有掛載到鉤子和過濾器上的函數
/**
* Print Filters For
*
* Discover what functions are attached to a given hook in WordPress.
*/
function print_filters_for( $hook = null ) {
global $wp_filter;
// Error handling
if ( !$hook )
return new WP_Error( 'no_hook_provided', __("You didn't provide a hook.") );
if ( !isset( $wp_filter[$hook] ) )
return new WP_Error( 'hook_doesnt_exist', __("$hook doesn't exist.") );
// Display output
echo '<details closed>';
echo "<summary>Hook summary: <code>$hook</code></summary>";
echo '<pre style="text-align:left; font-size:11px;">';
print_r( $wp_filter[$hook] );
echo '</pre>';
echo '</details>';
}
使用方法
例如,我使用的主題有一個自定義hook。
/* 顯示面包屑導航 */
function wizhi_show_breadcrumb() {
if ( function_exists( 'yoast_breadcrumb' ) ) {
yoast_breadcrumb( '<p class="breadcrumbs">當前位置:', '</p>' );
}
}
add_action( 'mx_post_before', 'wizhi_show_breadcrumb' );
現在,我需要顯示掛載到此hook上的功能,只需要在function里面加入以下代碼就可以了。
print_filters_for('mx_post_before');
顯示出來了結果如下:
Hook 概要: mx_post_beforeArray
(
[10] => Array
(
[show_breadcrumb] => Array
(
[function] => show_breadcrumb //這里就是掛載到該hook上的功能。
[accepted_args] => 1
)
)
)
有了這個方法,對于我們理解WordPress主題和插件的運行機制有很大的幫助,做WordPress開發(fā)的時候,會容易很多。如果你有更好的辦法,歡迎在留言中分享。


