在wordpress页面加载的最早点是什么,我可以检测到所请求的帖子?

时间:2011-05-11 16:48:38

标签: wordpress wordpress-plugin action

最早的wordpress动作是什么,可以可靠地检测到最终显示的帖子? (通过使用全局$ post或检测wp_query对象或其他方式)

例如。我的插件需要检测来自不同站点上另一个插件的传入请求,此时它使用add_action('plugins_loaded'尽早检查$ _POST var,并且回调函数使用$post = get_page_by_path($_SERVER['REQUEST_URI'],'','post')来获取$ post对象然后使用post数据获取用于处理响应的任何其他信息,该响应在任何标头或其他标准WP处理发生之前被发回,目的是减轻接收请求的博客上的负载。

有更好的方法吗?我知道没有更早的方法,因为'plugins_loaded'动作在插入加载之后立即被调用,但是有一种比使用get_page_by_path更可靠的方法吗?

1 个答案:

答案 0 :(得分:1)

我会尝试过滤器'the_posts'。您可以在wp-includes/query.php函数get_posts()中找到它。它通过引用将找到的帖子作为数组传递,因此您可以像操作一样使用它。

这是我用来检查钩子的插件:

<?php
/*
Plugin Name: Hook Check
Description: Inspects a hook and prints its information to the footer.
Version:     1.0
Required:    3.1
Author:      Thomas Scholz
Author URI:  http://toscho.de
License:     GPL
*/
! defined( 'ABSPATH' ) and exit;

$GLOBALS['hook_checks'] = apply_filters(
    'hook_check_filter'
,   array ( 'the_posts' )
);

foreach ( $GLOBALS['hook_checks'] as $hc_hook )
{
    add_action( $hc_hook, array( 'Hook_Check', 'catch_info' ) );
}
add_action( 'wp_footer', array( 'Hook_Check', 'print_info' ) );

class Hook_Check
{
    static $info = array ();

    public static function catch_info()
    {
        $args = func_get_args();
        self::$info[ current_filter() ] = print_r( $args, TRUE );
        return $args[0];
    }

    public static function print_info()
    {
        if ( empty ( self::$info ) )
        {
            return;
        }

        print '<pre>';
        foreach ( self::$info as $filter => $catched )
        {
            print "<b>$filter</b>\n" . htmlspecialchars( $catched );
        }
        print '</pre>';
    }
}

减少样本输出:

Array
(
    [0] => Array
        (
            [0] => stdClass Object
                (
                    [ID] => 112
                    [post_content] => The entire content …
                    [post_title] => An awesome title
                    [post_excerpt] => 
                    [post_status] => publish
                )
        )
)

这应该尽早为您提供所需的所有信息。

哦,我希望在问https://wordpress.stackexchange.com/上见到你。 :)