是否可以跟踪操作和筛选器?

时间:2013-12-11 作者:vorillaz

据我所知,使用操作和过滤器挂钩是在WordPress上开发的最佳方法。我只想问一下,是否有任何方法可以跟踪哪些操作和过滤器应用于WordPress渲染。

我的问题是基于这样一个事实,即WordPress上的钩子可以通过各种插件或活动主题本身来应用。

是否有任何方法可以跟踪触发了哪些操作和过滤器挂钩,以及它们是从哪个文件调用的?

3 个回复
最合适的回答,由SO网友:gmazzap 整理而成

知道哪一个文件调用过滤器或某个操作不可能运行代码,您必须搜索并阅读源代码或使用一些文档。

有不同的插件可以帮助您调试页面中触发的钩子,搜索codex和/或Google。

不过,要想快速了解情况,请在您的functions.php

class MyTracker {

  static $hooks;

  static function track_hooks( ) {
    $filter = current_filter();
    if ( ! empty($GLOBALS[\'wp_filter\'][$filter]) ) {
      foreach ( $GLOBALS[\'wp_filter\'][$filter] as $priority => $tag_hooks ) {
        foreach ( $tag_hooks as $hook ) {
          if ( is_array($hook[\'function\']) )  {
            if ( is_object($hook[\'function\'][0]) ) {
              $func = get_class($hook[\'function\'][0]) . \'->\' . $hook[\'function\'][1];
            } elseif ( is_string($hook[\'function\'][0]) ) {
              $func = $hook[\'function\'][0] . \'::\' . $hook[\'function\'][1];
            }
          } elseif( $hook[\'function\'] instanceof Closure ) {
            $func = \'a closure\';
          } elseif( is_string($hook[\'function\']) ) {
            $func = $hook[\'function\'];
          }
          self::$hooks[] = \'On hook <b>"\' . $filter . \'"</b> run <b>\'. $func . \'</b> at priority \' . $priority;
        }
      }
    }
  }

}

add_action( \'all\', array(\'MyTracker\', \'track_hooks\') );

add_action( \'shutdown\', function() {
    echo implode( \'<br />\', MyTracker::$hooks );
}, 9999);
现在访问目标页面并向下滚动到底部。。。

SO网友:Stuart OB

我写这个插件是为了满足你的要求-Simply Show Hooks. 它显示了所有操作和过滤器挂钩在您所查看的页面上的位置、内联、顺序,以及所有已挂钩到它们的函数。希望这有帮助:)

Simply Show Hook - WordPress plugin shows you where all the action and filter hooks are, inline, in order, on the page you're looking at

SO网友:Rafiq

既然@Stuart OB的插件已经有五年没有维护了,我将继续Show Hooks 具有一些很酷的特性和兼容性。

结束

相关推荐

为什么Apply_Filters在循环内部和外部的行为不同?

What I want: 通过创建$query = new WP_Query($args);Why: 以json格式返回特定内容,作为一种API请求,准备在另一个站点上显示What I tried first:foreach($query->posts as $post) { $post->post_content = apply_filters(\'the_content\', $post->post_content); }; 这执行了autop 和do