边栏列表:如果当前页面是最深级别的子页面,则显示同级页面。如果没有,则显示子页面

时间:2018-05-14 17:25:24

标签: php wordpress

如果当前页面是最深级别的子页面,我会创建一个显示同级页面的侧边栏,如果不是,则只显示子页面。就我而言,我还没有找到完成它的逻辑。有任何想法吗?提前谢谢。

global $post; 
    if ( is_page() && $post->post_parent )
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $interior_sidebar = '<ul class="child-pages">' . $childpages . '</ul>';
    }

3 个答案:

答案 0 :(得分:0)

Use wp_list_pages() with your parameters to get children of current post. If it comes back empty then display wp_list_pages() of current post's parent; if not empty display what was returned.

答案 1 :(得分:0)

你走在正确的轨道上。

global $post使用起来不安全(它可能是您正在查看的页面之外的帖子),尤其是在侧边栏中 - 我建议您这样做类似于get_queried_item()

而且,为了简单起见,我不建议多次调用wp_list_pages,而是建议在每个条件中设置参数,然后在最后进行一次wp_list_pages调用。

// safer method to get the page you are viewing
$post = get_queried_object();
// will be TRUE if there's any child pages, FALSE if not
$has_children = (0 != get_pages( [ 'child_of' => $post->ID ] ) );
// set to prevent notices
$child_pages = FALSE;

if ( is_page( $post->ID ) && $post->post_parent ) {
    $args = [
        'sort_column' => 'menu_order',
        'title_li'    => '',
        'echo'        => 0,
        // this is a ternary operation, that assigns $post->ID if $has_children, or $post_parent if not
        'child_of'    => ( $has_children ) ? $post->ID : $post->post_parent
    ];

    $childpages = wp_list_pages( $args );
}

if ( $childpages ) {
    $interior_sidebar = '<ul class="child-pages">' . $childpages . '</ul>';
}

注意:我已使用速记版本进行数组声明(例如,[ 'child_of' => $post->ID ]而不是array( 'child_of' => $post->ID ) - 这适用于PHP版本5.4+ - 如果您需要在旧版本的PHP上,升级 - 它不再受支持

答案 2 :(得分:0)

解决:

function wpb_list_child_pages() {
    global $post;
    $childpages = wp_list_pages(array(
        'child_of'    => $post->ID,
        'depth'       => 1,
        'echo'        => '0',
        'sort_column' => 'menu_order',
        'title_li'    => ''
    ));

    if ( $childpages ) {
        $string =$childpages;
    } else {
        $childpages = wp_list_pages(array(
            'child_of'  => $post->post_parent,
            'depth'     => 1,
            'exclude'   => $post->ID,
            'title_li'    => ''
        ));
        $string = $childpages;
    }

    echo $string; }

然后我在模板中调用了该函数:<ul class="child-pages"><?php wpb_list_child_pages(); ?></ul>