WP_LIST_PAGES分层帮助

时间:2013-12-10 作者:Danny

所以我一直在网上搜索一些我认为很容易实现的东西,我很可能是想得太多了。我已经找到了许多关于这个问题的相关文章,但似乎无法将其应用到我的场景中。我的网站上有一个侧边栏菜单,显示一层子页面。因此,如果单击“服务”,侧栏会显示

服务1、服务2、服务3、服务4、服务5非常完美,因为这是我在“服务”下面的5个子页。现在,“服务1、2和3”下有5-15个子页面。我想实现的是,如果单击侧栏中的“Service 1”,页面加载,侧栏将调整为显示:

服务1—子页1—子页2—子页3—服务2—服务3—服务4—服务5—因此,在第三层页面上,我仍然希望侧栏显示主要的子服务链接,但如果您位于具有自己子页的子服务页面上,我希望它显示这些子页以及原始的主服务子页。

目前我只能看到这样的节目:

单击“Service 1”,侧栏菜单反映:-Service 1--sub page 1--sub page 2--sub page 3-Service 2-Service 3-Service 4-Service 5

这很好,但是如果我点击其中一个“子页面”,菜单就会更新,只显示该服务的子页面,而不是之前的菜单结构。

抱歉发了这么长的帖子。我使用自定义助行器尝试了此链接:http://wordpress.mfields.org/2010/selective-page-hierarchy-for-wp_list_pages/ 我也尝试过:

        <ul class="sidebar_menu">
            <?php wp_list_pages( array(\'title_li\'=>\'\',\'include\'=>get_post_top_ancestor_id()) ); ?>
            <?php wp_list_pages( array(\'title_li\'=>\'\',\'depth\'=>1,\'child_of\'=>get_post_top_ancestor_id()) ); ?>
        </ul>
不过运气不好。谢谢你的帮助!编辑:还尝试了以下操作(直到达到第三层,然后删除子页的“第二”层。)

        <?php
            $ancestor_id=$post->post_parent;
            $descendants = get_pages(array(\'child_of\' => $ancestor_id));
            $incl = "";

            foreach ($descendants as $page) {
               if (($page->post_parent == $ancestor_id) ||
                   ($page->post_parent == $post->post_parent) ||
                   ($page->post_parent == $post->ID))
               {
                  $incl .= $page->ID . ",";
               }
            }
        ?>

        <ul>
            <?php wp_list_pages(array(
                "child_of" => $ancestor_id,
                "include" => $incl,
                "link_before" => "",
                "title_li" => "",
                "sort_column" => "menu_order"
                ));
            ?>
        </ul>

1 个回复
SO网友:Michael Ecklund

您之后全球$post, 您可以使用核心WordPress功能get_post_ancestors() 检索父页。

Example

$ancestors = get_post_ancestors($post);
if($ancestors){
    foreach(array_reverse($ancestors) as $post_id){
        $ancestor_page = get_post($post_id);
    }
}
然后,要检索当前页面的所有子页面,可以通过使用自定义函数来简化。在当前活动主题中放置自定义函数functions.php 文件

Example

if(!function_exists(\'mbe_get_post_children\')){
    function mbe_get_post_children($object){
        $data = array();
        $query = new WP_Query(array(
            \'posts_per_page\' => \'-1\',
            \'post_type\' => $object->post_type,
            \'post_status\' => \'publish\',
            \'post_parent\' => $object->ID
        ));
        wp_reset_query();
        wp_reset_postdata();
        if(!$query->posts){
            return false;
        }
        foreach($query->posts as $child_post){
            $data[] = $child_post;
            if($child_post->post_parent != $object->ID && $child_post->post_parent != 0){
                mbe_get_post_children($child_post);
            }
        }
        return $data;
    }
}
然后使用自定义函数检索当前页面的所有子页面,这与第一个示例非常相似,该示例检索当前页面的所有父页面。

Example

if(function_exists(\'mbe_get_post_children\')){
    $children = mbe_get_post_children($post);
    if($children){
        foreach($children as $child_id){
            $child_page = get_post($child_id);
        }
    }
}

结束

相关推荐

All the pages are blank

我的朋友网站博客运行良好,但所有页面都显示空白页面。我甚至看了源代码,什么也没写。它是空的。当WordPress的博客部分仍在工作时,是什么导致了这种情况?他正在使用WordPress版本3.6.1。以下是他使用的插件:Akismet类别到标签转换器导入器ePub导出Facebook Fanbox缓存小部件Google Analytics for WordPress Google XML站点地图。com快速聊天响应式附加组件分享按钮、分析、相关帖子WP CumulusWP Facebook grabber