在查看有些主题的代码的时候,我们经常会看得一头雾水,命名代码里面是很干净的,没有特殊的功能函数,但是前台输出的代码就是多了一些我们不想要的东西,这很可能就是主题作者把相应的功能挂载到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>';
}
Usage
例如,我使用的主题有一个自定义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开发的时候,会容易很多。如果你有更好的办法,欢迎在留言中分享。