Сохраняйте иерархию страниц в wp_list_pages, даже если у ребенка или внука

У меня есть следующая структура страниц, и мне нужно, чтобы та же самая структура отображалась на тех страницах, у которых есть дочерние страницы:

- Childpage
- - Grandchildpage
- - Other Grandchildpage
- Other Childpage

Следующий код используется для отображения структуры на page.php:

<ul class="sidemenu-list">
<?php
if($post->post_parent)
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=1");
else
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=1");
if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
</ul>

Это работает, когда на родительской странице. Но когда я нахожусь на одной из страниц ребенка или страниц внука, это больше не работает.

Следуя приведенному выше примеру структуры, когда я нахожусь на ‘Childpage’, я получаю только следующее:

- Childpage
- Other Childpage

И когда я на «странице внука», я получаю только:

- - Grandchildpage
- - Other Grandchildpage

Как правильно отображать иерархию страниц, даже если страница является дочерней или внуковой?

0

Решение

Используйте код ниже:

<?php
if(!$post->post_parent){
// get the child of the top-level page
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
}else{
// get the child pages if we are on the first page of the child level.
//$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");

if($post->ancestors)
{
// now get an ID of the first page
// wordpress collects ID in reverse order, so the "first" will be the last page
$ancestors = end($post->ancestors);
$children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0");
}
}

if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
1

Другие решения

Других решений пока нет …