如何按照准时制方法找到挂钩?

时间:2011-02-28 作者:Ashfame

我怎样才能跟上Just-In-Time 将我的功能连接到操作的方法?我的意思是每个人都只是把功能附加到一个非常早期的阶段,比如init 这就留下了优化的范围。我曾在Wordcamp的一次演示中看到,JIT将产生一些性能,我完全同意这一点,但我如何找出我能钩住的最后一个钩子是什么?

还有什么可以帮助理解WP代码执行流程的吗?

3 个回复
SO网友:Bainternet

看看Mike\'s answer to a similar question更具体地说,他在那里发布的插件可以用来创建所有操作挂钩和过滤器的列表,这些挂钩和过滤器被调用以按执行顺序生成该页面。

希望这有帮助

SO网友:Dougal Campbell

很多时候,人们使用init 钩但对于许多有条件执行的情况来说,这可能是一个错误。例如,在init 时间,视图类型(“主页”、“单个”、“页面”、“存档”等)尚不清楚。如果需要根据is_page() 或者类似的,您需要使用稍后执行的挂钩,如template_redirect.

类似地,对于管理端事件,通常最好使用admin_menu 挂钩而不是admin_init.

@Bainternet指出的问答中的资源非常有用,所以你应该仔细看看。但我想我应该指出一些可能有用的事情。

SO网友:kaiser

我自己用了一些不同的东西,但有一天我用了这个片段来改进我的钩子“spoofer”。

function list_hooks( $filter = false ){
    global $wp_filter;

    $hooks = $wp_filter;
    ksort( $hooks );

    foreach( $hooks as $tag => $hook )
        if ( false === $filter || false !== strpos( $tag, $filter ) )
            dump_hook($tag, $hook);
}

function list_live_hooks( $hook = false ) {
    if ( false === $hook )
        $hook = \'all\';

    add_action( $hook, \'list_hook_details\', -1 );
}

function list_hook_details( $input = NULL ) {
    global $wp_filter;

    $tag = current_filter();
    if( isset( $wp_filter[$tag] ) )
        dump_hook( $tag, $wp_filter[$tag] );

    return $input;
}

function dump_hook( $tag, $hook ) {
    ksort($hook);

    echo "<pre>&gt;&gt;&gt;&gt;&gt;\\t<strong>$tag</strong><br />";

    foreach( $hook as $priority => $functions ) {

    echo $priority;

    foreach( $functions as $function )
        if( $function[\'function\'] != \'list_hook_details\' ) {

        echo "\\t";

        if( is_string( $function[\'function\'] ) )
            echo $function[\'function\'];

        elseif( is_string( $function[\'function\'][0] ) )
             echo $function[\'function\'][0] . \' -> \' . $function[\'function\'][1];

        elseif( is_object( $function[\'function\'][0] ) )
            echo "(object) " . get_class( $function[\'function\'][0] ) . \' -> \' . $function[\'function\'][1];

        else
            print_r($function);

        echo \' (\' . $function[\'accepted_args\'] . \') <br />\';
        }
    }

    echo \'</pre>\';
}
如果有人写了这篇文章,请将自己命名为作者(带有到原始来源的链接)。我忘了保护链接

编辑:您还应该查看此页面@Codex. 在那里,您可以看到触发顺序的顺序
应该给您一个开始:/root/index.php > wp-blog-header.php > wp-load.php > wp-config.php > wp-settings.php > \\wp-includes\\load.php > \\wp-includes\\default-constants.php > ... 最好是从某处获取一些调试类,只需检查includes本地。

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $