排除wp_list_ages中的当前页面

时间:2012-08-22 作者:saltcod

我正在使用wp_list_pages() 显示子页面菜单。

结构简单美观。如下所示:http://cl.ly/image/0w1Q1q2D3D18

在子页面上时,菜单工作正常:http://cl.ly/image/3O310E0s2B3d

但是,唉,在父页面上时不起作用:http://cl.ly/image/3w0T3Q2s4347

看起来很简单,但我就是不知道到底是怎么回事。

这是我的wp_list_pages() 代码:

<?php

            $topmost_parent = $post->post_parent;

            $args = array(
                \'post_type\'    => \'guides\', 
                \'sort_column\' => \'menu_order\',
                \'title_li\'     => __(\'\'),
                \'echo\' => 0, 
                \'exclude\' => $topmost_parent
                );

            $children = wp_list_pages( $args );

            if ($children) :
        ?>

            <nav id="menu-context">
                <ul class="menu">
                    <?php echo $children; ?>
                </ul>
            </nav>

        <?php endif;?>
使用该$topmost_parent 直到我出现在父页面上,这个技巧才奏效。有人有新把戏吗?=)

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

如果您有多个父页面或多个级别的子页面,则代码将无法工作。使用get_ancestors 要获取顶部父页,请使用child_of 的参数wp_list_pages 而不是exclude 仅从该分支输出页面。

SO网友:saltcod

更详细的解释。

您首先需要确定您正在查看的页面是否有祖先。如果是子页面,则它有一个祖先;如果是父页面,则它没有祖先。这将决定您:

if (!$post->post_parent):
                    // will get the subpages of this top level page
                    $parent = $post->ID;
                elseif ($post->ancestors):
                    // now can get the the top ID of this page
                    // WordPress puts the IDs DESC, which is why the top level ID is the last one
                    $parent = end($post->ancestors);
                endif;
之后,您只需使用$parent 变量设置为child_of 论点因此:

$args_for_step_by_steps = array(
                \'post_type\'    => \'guides\', 
                \'sort_column\' => \'menu_order\',
                \'title_li\'     => __(\'\'),
                \'echo\' => 0, 
                \'child_of\' => $parent
                ); 
因此,只获取子页面的整个功能:

    <?php
        if (!$post->post_parent):
            // will get the subpages of this top level page
            $parent = $post->ID;
        elseif ($post->ancestors):
            // now can get the the top ID of this page
            // WordPress puts the IDs DESC, which is why the top level ID is the last one
            $parent = end($post->ancestors);
        endif;


        $args = array(
            \'post_type\'    => \'guides\', 
            \'sort_column\' => \'menu_order\',
            \'title_li\'     => __(\'\'),
            \'echo\' => 0, 
            \'child_of\' => $parent
            );

        $children = wp_list_pages( $args );

        if ($children) :
    ?>



        <nav id="menu-context">
            <ul class="menu">
                <?php echo $children; ?>
            </ul>
        </nav>

    <?php endif;?>

SO网友:Marc Wiest

或创建一个主菜单,如下所示:

if ( function_exists( \'register_nav_menus\' ) ) {
    register_nav_menus( array( \'primary\' => \'Primary Navigation\' ) );
}
然后在管理中,转到外观>菜单,并从下拉菜单中选择主菜单。你只是不包括你不想要的页面。

结束

相关推荐