时间:2024-03-28
在看一些主题的代码时,经常会有一些困惑,有时代码的命名很干净,没有任何有特别功能的函数,但前端输出的代码就是多了一些我们不想要的东西。这很可能是主题作者把相应的功能挂载在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时更加方便。如果你有更好的办法,欢迎在留言中分享。
Copyright © 2019-2024 mysql.hk