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

文 / @WordPress主题

小本本的技术分享

在看一些主题的代码时,经常会有一些困惑,有时代码的命名很干净,没有任何有特别功能的函数,但前端输出的代码就是多了一些我们不想要的东西。这很可能是主题作者把相应的功能挂载在WordPress的钩子上了。但是在找到这些钩子或挂载的函数时,需要逐个查找它们的代码非常耗时。今天,小本本给大家分享一种比较方便的方法。

列出所有挂载到钩子和过滤器上的函数

/**
 * PrintFiltersFor
 *
 * 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 summary: mx_post_before
Array
(
    [10] => Array
        (
            [show_breadcrumb] => Array
                (
                    [function] => show_breadcrumb // 这里就是挂载到该hook上的功能。
                    [accepted_args] => 1
                )

        )

)

使用此方法可以帮助我们更好地理解WordPress主题和插件的运行机制,在开发WordPress时更加方便。如果你有更好的办法,欢迎在留言中分享。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。