我正在尝试制作一个短代码,我可以将其放入一个小部件中,如果有其他显示孩子的小部件,它将显示兄弟姐妹。
以下是我的代码:
//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]
.
现在,菜单只显示在孩子和兄弟姐妹的页面上。它显示了兄弟姐妹。
理想情况下,我想如果这是一个没有孩子的顶级页面,不要显示。
如果是包含子级的顶级页面,请显示子级。
如果是包含兄弟姐妹的子页面,请显示兄弟姐妹。
离这里近吗?
也许有一种方法可以做到这一点,而无需创建家长,但只需使用我在外观/菜单中设置的菜单,它将只显示我在那里设置的孩子的选项?
最合适的回答,由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\');