$сообщение>ИДЕНТИФИКАТОР отображает неправильный идентификатор записи


Я уже задавал вопрос о перечислении всех подстраниц раньше:

Перечисление всех подстраниц?

Но все вопросы были неправильными.

В любом случае, теперь у меня есть более простой вопрос.

global $post;
echo $post>ID

Работает абсолютно нормально, но только на боковых панелях страниц. Когда он находится рядом с циклом блога (в разделе блога), он сходит с ума, например, у блога идентификатор 216 (и $post>ИДЕНТИФИКАТОР в loop.php показывает 216), но идентификатор $post>на боковой панели показывает 87. Почему это происходит? Как это исправить?

Спасибо вам!

[редактировать]

У меня есть подозрение, что цикл и боковая панель включены в страницу индекса отдельно, и цикл получает другой идентификатор записи, чем боковая панель. Большой вопрос в том, как это изменить.

[редактировать для Rarst]

 wp_reset_postdata();

                global $post;

                $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
                echo $children;

Дает тот же результат. Он работает со страницами, а не с блогом. У меня есть обычная петля, как, например, в Двадцать десятом.

Author: Community, 2011-03-05

2 answers

Если я правильно понимаю, вы пытаетесь отобразить список дочерних страниц страницы в виджет, если да, то сначала проверьте, если вы находитесь на странице, через условный тег is_page() затем вы можете использовать $wp_query->get_queried_object_id (), как t31os указал, так что ваша функция отображения виджета должен выглядеть следующим образом:

if (is_page()){
    Global $wp_query;
    $current_page_id = $wp_query->get_queried_object_id();
    $children = wp_list_pages('title_li=&child_of='.$current_page_id.'&echo=0');
    echo $children;
}

Таким образом, только если вы находитесь на странице, этот код будет выполняться

 5
Author: Bainternet, 2011-03-05 15:54:23

$post меняется каждый раз, когда используются the_post() или setup_postdata(), что происходит в большинстве циклов.

Используйте wp_reset_postdata(), чтобы вернуть его к исходным данным.

Редактировать

$post содержит данные отдельного сообщения , настроенного во время цикла. Нет смысла использовать его вне этого контекста.

Для обработки нескольких страниц вам нужно запросить их (например, с помощью get_pages()) и работать с ними.

 5
Author: Rarst, 2011-03-05 14:42:21