动态菜单wp_list_ages仅显示当前分支,包括:当前页、其兄弟及其子页

时间:2014-12-27 作者:ChowKaiDeng

我正在尝试构建一个侧栏菜单,显示祖父母页面的子页面、他的兄弟姐妹和他们的孩子,并在导航时保持这些兄弟姐妹和孩子可用。

我一直在论坛上查看不同和类似的帖子,但到目前为止,我还没有找到一个确切的解决方案,也没有什么可以调整的方法来实现这一点。

这是我的页面结构:

服务一号服务一号服务二号服务二号服务二号服务二号服务二号服务二号服务二号服务一号服务二号服务二号服务二号服务二号服务二号服务二号服务二号服务二号服务一我是什么尝试做的是:

如果我是“服务一号”,我应该只显示“服务一号”,他的兄弟姐妹和孩子。

服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务二号服务一号服务一号服务一号服务一号服务三号服务一号服务一号。

服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务一号服务二号服务一号服务一号服务一号服务一号服务三号服务一号服务一号。

服务一服务一关于服务一子服务一子服务一子服务一子服务一A[当前]子服务一B子服务一子服务一C等。

也就是说,如果不清楚的话:在我浏览“服务一”和“服务二”时,我不想排除“服务”祖父母以及整个“服务二”分支。

控制每个级别的输出对我来说非常重要,因为我在页面上创建了一个自定义字段,将其用作CSS类。我用的这个Toolset Types & Views 我打算把这个打印成<?php echo do_shortcode(\'[some-custom-field-shortcode]\') ?> 如下例所示。

另外,如果我可以在当前菜单项中添加一个类,这样我就可以将其标记为当前项,那将非常好。

根据上面的“Sub-service One A”示例,我的输出标记应该是这样的:

<ul class="menu">
    <li><a href="#">Service One About</a></li>
    <li><a href="#">Service One Sub-Services</a>
        <ul class="sub-menu">
            <li class="current-menu-item"><a href="#"><span class="icon [some-custom-field-shortcode]"></span> <span class="text">Sub-service One A</span></a></li>
            <li><a href="#"><span class="icon [some-custom-field-shortcode]"></span> <span class="text">Sub-service One B</span></a></li>
            <li><a href="#"><span class="icon [some-custom-field-shortcode]"></span> <span class="text">Sub-service One C</span></a></li>
        </ul>
    </li>
</ul>
你能帮我一下吗?我一直在为实现这一目标而努力;视图,但他们的论坛似乎没有帮助(其他用户也提出过类似的问题,大多数用户只是感到沮丧,最终使用了一个插件,如this.

提前非常感谢!:)

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

基本上,如果您在“服务一”的任何子页面中,您希望显示“服务一”的子页面菜单,如果您在“服务二”的任何子页面中,您希望显示“服务二”的子页面菜单,依此类推。

这可以通过child_of 的参数wp_list_pages. 我们可以使用get_post_ancestors 并将前一个父级设置为child_of 参数(如果您在“服务一”的页面子级中,则最后一个父级为“服务”,如果您在“服务二”的页面子级中,则前一个父级为“服务一”,依此类推)。

包括<span> 在我们可以使用的地方执行shortocodeslink_beforelink_after 参数。

例如:

function pages_menu() {

    if( !is_page() ) {
        return false;
    }

    $page_id = get_queried_object_id();
    $ancestors = get_post_ancestors($page_id);
    $ancestors_count = count($ancestors);
    if( $ancestors_count > 1 ) {

        //the last item in $ancestors will be the top parent page, that is "Services"
        //but we want the before top parent ("Service One", "Service Two", etc)
        $top_menu_page = $ancestors[$ancestors_count - 2];

    } else {
        //We are actually on one of our top menu pages ("Service One", "Service Two", etc)
        $top_menu_page = $page_id;
    }

    $args = array(
        \'child_of\'    => $top_menu_page,
        \'link_before\' => \'<span class="icon \'.do_shortcode(\'[some-custom-field-shortcode]\').\'"></span> <span class="text">\',
        \'link_after\'  => \'</span>\',
    );
     wp_list_pages( $args );

}
现在您可以使用pages_menu() 在任何页面上打印此动态菜单。

关于课程。当前页已具有current_page_item 根据需要上课。此外,每个页面类属性都包含一组表示该项目的完整类,包括页面ID、包含子页面的类、包含父页面的类、当前页面的父/子页面的类等。请检查输出以了解想法。

(我不知道该代码将在何处使用。它可能需要调整以完全满足您的需要。)

结束

相关推荐

All pages lead to home

我最近从linux转到了windows主机,现在我所有的永久链接都重定向到了主页。我在“设置”->“永久链接”中选择了正确的结构,并在我的网站中显示了以下内容。配置。希望我犯了个愚蠢的错误-有什么想法吗? <rewrite> <rules> <!--rule name=\"Convert to lower case\" stopProcessing=\"true\">