WP_LIST_PAGES显示所有子页面上的所有页面

时间:2021-03-24 作者:absolutelygradually

我有这个代码来在侧边栏上列出我的父页面及其下的所有页面。它在前两个级别上同时显示父页面和子页面,但当我打开第三个级别的页面时,它只在侧边栏上显示当前页面。如何修改它以显示父页面和所有子页面,无论我有多少级的子页面。

代码:

<?php
        if ( $post->post_parent ) {
            $children = wp_list_pages( array(
                \'title_li\' => \'\',
                \'depth\'    => 0,
                \'child_of\' => $post->post_parent,
                \'echo\'     => 0
    
            ));
    } else {
        $children = wp_list_pages( array(
            \'title_li\' => \'\',
            
            \'depth\'        => 0,
            \'child_of\' => $post->ID,
            \'echo\'     => 0

        ) );
    }

    if ( $children ) : ?>
        <ul class="sideNavigation">
            <?php echo $children; ?>
        </ul>
    <?php endif; ?>

1 个回复
SO网友:Bhautik

使用此WP功能get_pages()get_page_children()

function get_child_pages( $parent_page_ID ){
    $all_pages = get_pages( array( \'post_type\'=> \'page\' ) );
    $child_pages = get_page_children( $parent_page_ID, $all_pages );
    if( !empty( $child_pages ) ){
        $html .= \'<ul>\';
        foreach ( $child_pages as $key => $child_page ) {
            $html .= \'<li>\'.$child_page->post_title;
            get_child_pages( $child_page->ID );
            $html .= \'</li>\';
        }
        $html .= \'</ul>\';
    }
    return $html;
}

function list_pages(){
    $html = \'\';

    if ( $post->post_parent ) {
        $parent = $post->post_parent;
    }else{
        $parent = $post->ID;
    }

    $parent_pages = get_pages( array( \'parent\' => $parent, \'post_type\'=> \'page\' ) );
    $html.= \'<ul>\';
    foreach ( $parent_pages as $parent_page ) {
        $html .= \'<li>\'.$parent_page->post_title;
        $html .= get_child_pages( $parent_page->ID );
        $html .= \'</li>\';
    }
    $html.= \'</ul>\';
    return $html;
}
add_shortcode( \'list_pages\', \'list_pages\' );

相关推荐

Odd spacing in Navigation Bar

我正在重新设计my website, 我很难找到是什么导致导航项目之间的间距(我假设是边距)。我一直在钻研chrome开发工具,但我在任何地方都找不到导致它的原因。请注意,当您在项目之间悬停时,项目之间会有一个明显的白色条带。