WordPress 实用小功能:列出所有挂载到钩子和过滤器上的函数


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

  • 分享:
评论
还没有评论
    发表评论 说点什么