Кажется, что $ 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.
init
слишком рано,global $post;
чтобы быть в поле зрения. может быть, если вы опишите, что вы пытаетесь сделать, это поможет лучше.Ответы:
Оказывается, ответ был просто использовать
url_to_postid
как это:Работает отлично даже от
init
.источник
Это также работает в WordPress 4.7:
источник
Были проблемы с использованием принятого ответа, так как он не работает с портами и многосайтовыми портами . Вот решение, которое должно работать в любом случае:
источник