最早的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更可靠的方法吗?
答案 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/上见到你。 :)