Получить $post в фильтре или действии init?
Похоже, что $post доступен только для хуков, выполняющихся в определённое время. У меня есть хук "init", которому нужно получить некоторые данные из базы данных, используя $post->ID.
Пока что моим единственным обходным решением было добавление другого фильтра на the_content, который использует $post для получения нужной информации. К сожалению, он также выводит возвращаемое значение на экран и не возвращает его в функцию, которая изначально вызвала фильтр.
Вот код, который извлекает нужные данные, но выводит их и не возвращает значение:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
У кого-нибудь есть предложения, как получить то, что мне нужно, и передать это обратно в вызывающую функцию для последующего использования в плагине?
РЕДАКТИРОВАНИЕ: Чтобы сделать вопрос более понятным, у меня есть фильтр, работающий на init, которому нужно получать информацию о текущем посте из базы данных. Для этого требуется доступ к $post->ID. Но это невозможно в рамках init, так как же мне получить нужный результат?
Спасибо,
Джонатан
РЕШЕНИЕ:
Оказалось, ответом было просто использовать url_to_postid вот так:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
Работает идеально, даже из init.

Оказалось, решение заключается в простом использовании функции url_to_postid
следующим образом:
$keyword = get_post_meta( url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ), '_wpg_def_keyword', true );
Работает идеально, даже если вызывать из хука init
.

Возникли проблемы с использованием принятого ответа, так как он не работает с портами и портами мультисайта. Вот решение, которое должно работать в любом случае:
/**
* Примечание: Эта функция будет работать только для ОДИНОЧНЫХ записей/страниц/типов записей
*/
function get_early_postid() {
return url_to_postid((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
}
// пример использования
add_action('init','my_super_early_meta_action');
function my_super_early_meta_action() {
$keyword = get_post_meta( get_early_postid(), '_wpg_def_keyword', true );
}
