get_post_meta () извлекает мета из определенной записи на страницах, а не просматриваемую страницу

Я создаю простую функциональность боковой панели для отображения встроенного видео на боковой панели. Я создал мета-поле, где администратор должен вставлять вставляемое видео. Он работает так, как на должностях, но на страницах get_the_ID() всегда возвращает тот же ID, 145, ID одного из сообщений.

Вот код, который я использую:

 <?php $id = get_the_ID(); $video_value = get_post_meta($id, '_post_video', true); if (! empty($video_value)) { echo $video_value; echo get_the_ID(); } else { echo 'no video to show'; echo get_the_ID(); } ?> 

Я немного смущен, поэтому, если кто-то может немного осветить это … Спасибо!

Solutions Collecting From Web of "get_post_meta () извлекает мета из определенной записи на страницах, а не просматриваемую страницу"

Существует еще один запрос, который заменяет основной идентификатор сообщения. Возможно, это еще один виджет, какой-то странный код плагина или что-то еще. Если у вас нет контроля над контекстом, соберите идентификатор сообщения раньше:

 add_action( 'template_redirect', 'collect_post_id' ); function collect_post_id() { static $id = 0; if ( 'template_redirect' === current_filter() && is_singular() ) $id = get_the_ID(); return $id; } 

Вместо collect_post_id() теперь используйте collect_post_id() в вашем коде.

 $video_value = get_post_meta( collect_post_id(), '_post_video', true ); 

get_the_ID использоваться в Loop.

Из Кодекса:

Этот тег должен находиться внутри цикла.

Использование:

 $id = get_queried_object_ID(); 

См. Здесь для документов.

где-то в коде вашего сайта существует цикл запроса костюма, который не сбрасывает основные параметры цикла после его завершения. Правильнее всего это выследить его и вызвать wp_reset_query() когда он закончится, альтернативой является вызов его в начале вашего кода

 wp_reset_query() $id = get_the_ID(); $video_value = get_post_meta($id, '_post_video', true); ...