Получить ID текущей страницы из шаблона

19 февр. 2018 г., 12:09:41
Просмотры: 14.8K
Голосов: 1

Я пытаюсь получить ID страницы из моего шаблона template-contact.php следующим образом:

global $post;
echo $post->ID;

Он показывает 85, но ID страницы - 96. Мне нужно получить ID, потому что я хочу получить метаданные текущей страницы.

Вот код моего шаблона:

<?php /* Template Name: Контактная страница */ ?>

<?php get_header() ?>
<?php 

global $post;
echo get_post_meta($post->ID, 'contact_page', true);


?>
<?php get_footer() ?>

Пожалуйста, помогите

4
Комментарии

Этот код верный (хотя я бы использовал get_the_ID() для того же). Где именно в вашем шаблоне вы его загружаете? Вы уверены, что вызываете это внутри цикла?

swissspidy swissspidy
19 февр. 2018 г. 12:51:23

Я отредактировал вопрос и добавил код шаблона, как получить мета-информацию для страницы. В $post->ID я получаю ID записи вместо ID текущей страницы.

Anand Siddharth Anand Siddharth
19 февр. 2018 г. 13:24:02

Разобрался, мне просто нужно было написать the_post() перед global $post.

Anand Siddharth Anand Siddharth
19 февр. 2018 г. 13:32:13

Хочу отметить, что $wp_query->post->ID и get_the_ID() могут кэшироваться в зависимости от различных тем, систем построения тем, плагинов и других настроек. В приведённом ниже посте использование get_queried_object_id работает как наиболее надёжный метод вне цикла с "абсолютной" точки зрения. Я сталкивался с проблемой "доверия" к get_the_ID() во многих современных темах/системах построения, потому что они передают ID через серию шаблонов/страниц конструктора, что затеняет "РЕАЛЬНЫЙ" ID страницы, на которой, как вам кажется, вы находитесь, в зависимости от того, что вы пытаетесь сделать в шаблоне.

Christian Žagarskas Christian Žagarskas
7 авг. 2022 г. 00:59:38
Все ответы на вопрос 1
1

Чтобы получить ID страницы, которая запрашивается вне цикла или до установки глобального объекта поста, используйте get_queried_object_id().

<?php
/**
 * Имя шаблона: Страница контактов 
 */

get_header();
?>

<?php
$page_id = get_queried_object_id();
echo get_post_meta( $page_id, 'contact_page', true);
?>

<?php get_footer() ?>
19 февр. 2018 г. 13:39:21
Комментарии

Ваш ответ правильный. Хочу отметить, что $wp_query->post->ID и get_the_ID() могут кэшироваться в зависимости от различных плагинов или настроек. Согласен, что get_queried_object_id работает.

Christian Žagarskas Christian Žagarskas
7 авг. 2022 г. 00:58:59