不显示子页面的子页面

时间:2016-03-02 作者:Dionoh

我正在寻找(不必复制整个代码)当子页面有自己的子页面时,它不会显示这些子页面,但仍然会将parrent页面提升2级。我玩过它,但在我看来,我必须复制整个代码,更改级别设置,并给出不同的短代码名称。

    function wpb_list_child_pages_popup() 
{
    // Define our $string variable
    $string = \'\';

    // Make sure this is a page
    if ( !is_page() )
        return $string;

    $post = $GLOBALS[\'wp_the_query\']->get_queried_object();
    // Make sure the current page is not top level
    if ( 0 === (int) $post->post_parent ) {
        $parent = $post->ID;
    } else {
        $ancestors = get_ancestors( $post->ID, $post->post_type );
        // Check if $ancestors have at least two key/value pairs
        if ( 1 == count( $ancestors ) ) {
            $parent = $post->post_parent;
        } else {
            $parent = $ancestors[1]; // Gets the parent two levels higher
        }
    }  

    $childpages = wp_list_pages( \'sort_column=menu_order&title_li=&child_of=\' . $parent . \'&echo=0\' );

    $string .= \'<ul id="child-menu">\' . $childpages . \'</ul>\';

    return $string;

}

add_shortcode(\'wpb_childpages_popup\', \'wpb_list_child_pages_popup\');
代码-感谢Pieter Goosen

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

您可以使用depth 论点为了更好的可读性,我还创建了一个参数数组。

这个depth 参数接受以下参数:

“depth”(int)要包含在生成的列表中的页面层次结构中的级别数。接受-1(任意深度)、0(所有页面)、1(仅限顶级页面)和n(指定n个深度的页面)。默认值0。

因此,当您要显示第一个子级时,需要将其设置为2,如果希望包含下一级,请将其设置为3。1为您提供顶级($parent == 0) 只有

$args = array(

    \'sort_column\' => \'menu_order\',
    \'title_li\'    => \'\',
    \'child_of\'    => $parent,
    \'echo\'        => 0,
    \'depth\'       => 2 

);
$childpages = wp_list_pages( $args );

相关推荐

SHORTCODE_ATTS()中的$ATTS参数是什么?

这个WordPress developers reference page for shortcode_atts() 国家:$atts(array)(必选)用户在shortcode标记中定义的属性。但我不理解这个定义。例如,在WP Frontend Profile 插件:$atts = shortcode_atts( [ \'role\' => \'\', ], $atts ); 据我所知,shortcode\