在wp_list_ages中保留页面层次结构,即使在子项或孙项上也是如此

时间:2015-10-16 作者:andyderuyter

我有以下页面结构,我需要在有子页面的页面上显示相同的结构:

- Childpage
- - Grandchildpage
- - Other Grandchildpage
- Other Childpage
以下代码用于在页面上显示结构。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
即使页面是子页面或孙子页面,显示页面层次结构的正确方法是什么?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

很明显$post_parent 属性将为0 在任何父页面上,因此您只希望在以下情况下运行$post_parent 不是0

我现在无法编写任何具体的代码,但简而言之,基本思想是:

首先检查当前post父级。如果post parent不是0, 你会想得到最棒的职位

一旦我们确定当前post父级不是0, 我们需要使用get_ancestors() 返回最顶端的父帖子。

Example

$parent = get_ancestors( 
    get_queried_object_id(), // Get current page ID
    \'page\' // Post type
);
var_dump( $parent );
现在您有了一个父ID数组,您需要从该数组中获取最顶层的父ID。这将始终是数组中的最后一个ID,因此您需要

翻转阵列(array_flip) 要首先获得最顶层的父级,请使用$parent[0] 获取最顶层的父值

其他php函数,如end 获取数组中的最后一个值

现在,您可以正常运行代码了。

相关推荐

Read_Private_Pages功能不适用于新角色

我已经创建了一个新的用户角色-供应商-能够read_private_pages, 但当我以这样的用户身份登录并转到一个私人页面时,我看不到它。以下是我的插件代码:function fc_add_role($role, $display_name, $capabilities = array()) { if (!empty($role)) { return wp_roles()->add_role( $role, $display_name, $capabili