创建快捷代码以显示子项(如果有其他兄弟项)

时间:2019-03-13 作者:rudtek

我正在尝试制作一个短代码,我可以将其放入一个小部件中,如果有其他显示孩子的小部件,它将显示兄弟姐妹。

以下是我的代码:

//sidebar siblings menu
function rt_list_children() {
    global $post;
    $page = $post->ID;
    if ( $post->post_parent ) {
        $page = $post->post_parent;
    }
    $children = wp_list_pages( array(
        \'child_of\' => $page,
        \'title_li\'    => \'\',
        \'echo\' => \'0\',
    ) );

    if ($children) {
       $output = \'<ul>\';
       $output .= $children;
       $output .= \'</ul>\';
    } else {
       $output = \'\';
    }
    return $output;
}
add_shortcode (\'sidebar-menu\',\'rt_list_children\');
然后,在html小部件中,我粘贴[sidebar-menu].

现在,菜单只显示在孩子和兄弟姐妹的页面上。它显示了兄弟姐妹。

理想情况下,我想如果这是一个没有孩子的顶级页面,不要显示。

如果是包含子级的顶级页面,请显示子级。

如果是包含兄弟姐妹的子页面,请显示兄弟姐妹。

离这里近吗?

也许有一种方法可以做到这一点,而无需创建家长,但只需使用我在外观/菜单中设置的菜单,它将只显示我在那里设置的孩子的选项?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

是的,你很接近。你想要的是这样的:

function rt_list_children() {
    global $post;
    $output = \'\';

    if ( $post->post_parent ) {  // if it\'s a child page
        $siblings = wp_list_pages( array(
            \'child_of\' => $post->post_parent,
            \'title_li\'    => \'\',
            \'echo\' => \'0\',
        ) );
        if ( $siblings ) {  // it has siblings
            $children = $siblings;
        } else {  // it has no siblings, so show its children
            $children = wp_list_pages( array(
                \'child_of\' => $post->ID,
                \'title_li\'    => \'\',
                \'echo\' => \'0\',
            ) );
        }
    } else {  // it\'s a top level page, show its children
        $children = wp_list_pages( array(
            \'child_of\' => $post->ID,
            \'title_li\'    => \'\',
            \'echo\' => \'0\',
        ) );
    }

    if ( $children ) {
       $output = \'<ul>\' . $children . \'</ul>\';
    }
    return $output;
}
add_shortcode (\'sidebar-menu\',\'rt_list_children\');

相关推荐