List subpage of subpage

时间:2012-07-09 作者:wp-hooves

我有一个具有以下结构的站点:

关于

第1页第2页第3页第3.1页第3.2页,。。。是“关于”页的子页。我想有一个侧边栏,列出页面,但只显示子页面时需要。所以当我在第1页时,我需要看到:

当我在第3页时,我需要看到:

第1页,第2页,第3页,第3.1页,第3.2页,当我在第3.1页或第3.2页时,我也想看到同样的东西。到目前为止,我已获得以下代码:

<?php
  if($post->post_parent)
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0&depth=1");
  else
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0&depth=1");
  if ($children) { ?>
  <ul>
  <?php echo $children; ?>
  </ul>
  <?php } ?> 
但当我现在在第3页时,子页面没有列出。我尝试过以各种方式调整代码,但要么子页面没有列出,要么父页面或同级页面没有显示。。。有人对此有什么建议或解决方案吗?谢谢

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

这是我在子菜单中使用的一个函数,也许有更好的方法可以做到这一点,但我最终总是得到这个解决方案。将此函数添加到主题函数中。php文件:

function wpse_submenu( $id, $echo = false, $showParent = true, $depth = 0 ) {
    global $wpdb, $post, $before, $page_for_posts;

    // if is a page
    if( get_post_type() == \'post\' || is_paged() ) {
        $id = get_option(\'page_for_posts\');
    }

    $the_post_ID = $id;
    $page_id = get_page( $id );
    _get_post_ancestors( $page_id );
    $ancestors = array_filter( $page_id->ancestors );
    $parent_id = count( $ancestors ) > 0 ? $ancestors[ count( $ancestors ) - 1] : $id;

    $post->ID = $id;

    $page_query = get_page( $parent_id );
    $parent_title = $page_query->post_title;
    $page_menu = wp_list_pages(\' echo=0&depth=\'. $depth .\'&title_li=&child_of=\'. $parent_id );

    wp_reset_query();

    // echo or not
    if( $echo ){
        $sub_pages = explode( "\\n", $page_menu );

        // add class first and last class
        $last = (count( $sub_pages ) - 2);
        $sub_pages[0] = str_replace( \'class="\', \'class="first \', $sub_pages[0] );           // first
        $sub_pages[$last] = str_replace( \'class="\', \'class="last \', $sub_pages[$last] );    // last

        // if the parent is the current page
        if( $the_post_ID == $parent_id ){
            $class = " current_page_item";
        } else {
            $class = "";
        }

        echo \'<ul class="pagenav">\';

            // if to show the parent in the menu
            if( $showParent ){
                echo \'<li class="parent-page page_item\'. $class .\'" ><a href="\'. get_permalink( $parent_id ) .\'">\'. $parent_title .\'</a></li>\';
            }

            // echo all the pages
            foreach( $sub_pages as $page ){
                echo $page ."\\n";
            }

        echo \'</ul>\';
    } else {
        return $page_menu;
    }
}
并将其放置在您希望显示子菜单的位置:

<?php if( wpse_submenu( $post->ID ) ) wpse_submenu( $post->ID, true, false ); ?>
和som basic css,在第一级时将隐藏子页面:

.pagenav ul {
    display: none;
}
.pagenav .current_page_parent .children,
.pagenav .current_page_ancestor .children,
.pagenav .current_page_item .children {
    display: block;
}

结束

相关推荐