Каково самое раннее действие WordPress, когда сообщение, которое в конечном итоге будет показано, может быть надежно обнаружено? (либо с помощью глобального $post, либо путем обнаружения объекта wp_query или другим способом)
например. моему плагину необходимо обнаружить входящий запрос от другого плагина на другом сайте, в данный момент он проверяет переменную $_POST как можно раньше, используя add_action('plugins_loaded', а функция обратного вызова использует $post = get_page_by_path($_SERVER['REQUEST_URI'],'','post') для получения объекта $post, а затем использует сообщение данные для получения любой другой информации, которая используется для обработки ответа, который отправляется обратно до того, как произойдут какие-либо заголовки или другая стандартная обработка WP с целью уменьшения нагрузки на блог, получающий запрос.
есть ли лучший способ? Я знаю, что нет более раннего способа, потому что действие 'plugins_loaded' вызывается сразу после загрузки плагинов, но есть ли более надежный способ, чем использование get_page_by_path ?
Ответ 1 · рейтинг 1 · fuxia
Я бы попробовал фильтр '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/ с такими вопросами. :)