我想这应该很容易,但我还没有找到合适的解决方案。
我想限制wp\\u list\\u页面的深度,以免显示最后一级的页面。所以假设父页面A有3个级别的页面,我只想列出前2个级别。我正在寻找一个函数来计算页面的最大深度,但没有成功。
到现在为止我的代码是
$parents = get_post_ancestors($post->ID);
if (count($parents)>1) {
$parent = $parents[count($parents)-2];
} else {
$parent = $post->ID;
}
$args = array(
\'depth\' => 0, // this should be set dynamically
\'child_of\' => $parent,
\'sort_column\' => \'menu_order, post_title\',
\'post_type\' => \'page\',
\'post_status\' => \'publish\'
);
wp_list_pages( $args );
非常感谢您的帮助
最合适的回答,由SO网友:fischi 整理而成
这有点棘手,我的解决方案可能对性能不是最好的。您可以将此值作为自定义字段添加到页面中,这样就不必每次都查询它。
// get the ancestors of the page, and check if the page is toplevel
$parent = array_reverse( get_post_ancestors( $post->ID ) );
if ( isset( $parent[0] ) ) {
$toplevel = $parent[0];
} else {
$toplevel = $post->ID;
}
// get the children of this toplevelpage
$children = get_page_hierarchy( get_pages(), $toplevel );
$depth = 0;
foreach ( $children as $child => $slug ) {
// check how many ancestors this page has
$count = count( get_ancestors( $child, \'page\' ) );
// if more than the current depth, set the depth to the new value
if ( $count > $depth ) {
$depth = $count;
}
}
echo $depth; //total depth below this toplevelpage, you can delete this part afterwards
$depth_without_last = $depth - 1;
只需在
depth
在您的
$args
, 这应该有效:)