我有一个非常正常的页面层次结构,如下所示:
- Main page
- - Child page
- - Child page 2
- - Child page 3
- - - Sub child page
- - - Sub child page 2
- - Child page
- - Child page
- - - Sub child page
- Main page 2
- - Child page
...
当我在任何页面上时,我想在侧栏上显示包含所有子页面的菜单,而不是主页面。 这个,我可以用另一个答案得到的这组论点来做:
<?php
$child_of_value = ( $post->post_parent ? $post->post_parent : $post->ID );
$depth_value = ( $post->post_parent ? 2 : 1 );
$args = array(
'depth' => $depth_value,
'sort_column' => 'menu_order',
'sort_order' => 'asc',
'title_li' => '',
'child_of' => $child_of_value,
'echo' => 0
);
$children = wp_list_pages($args);
?>
这样,在菜单中显示属于同一主页面的所有子页面。问题在于子子页面。我只想在我的直接父页面中显示它们,但是与所有其他页面一起显示它们。
因此,例如,如果我在没有任何其他孩子的子页面中,它将显示如下:
- - Child page <---
- - Child page 2
- - Child page 3
- - Child page
- - Child page
如果我在第三个,它会显示如下:
- - Child page
- - Child page 2
- - Child page 3 <---
- - - Sub child page
- - - Sub child page 2
- - Child page
- - Child page
同样,如果我在子子页面中,我会显示相同的内容。 有什么方法可以实现这个修改参数吗?
答案 0 :(得分:2)
不只是修改参数,而是可以通过CSS实现。如果你像你一样操纵深度,它将获得菜单中所有链接的深度。这对于深度为零是好的,但是当你达到深度1&amp;除此之外,它将显示所有有孩子的页面的子菜单。
相反,这里是生成菜单的代码,该菜单列出了所有深度的顶级页面的所有子页面(包括孙子,曾孙等),然后可以根据当前页面隐藏或显示:
<?php
global $post;
$parent_id = wp_get_post_parent_id( $post->ID );
$top_parent = $post->ID;
while( $parent_id ){
if( $parent_id > 0 ){
$top_parent = $parent_id;
}
$parent_id = wp_get_post_parent_id( $parent_id );
}
$args = array(
'sort_column' => 'menu_order',
'sort_order' => 'asc',
'title_li' => '',
'child_of' => $top_parent,
'echo' => 1
);
$children = wp_list_pages($args);
?>
在样式表中,您可以使用以下内容:
.page_item_has_children > .children {display: none;} /*hides the submenu*/
.page_item_has_children.current_page_item > .children,
.page_item_has_children.current_page_ancestor > .children {display: block;} /*shows the submenu for the current page or when on its subpages /*