动态限制wp_list_ages的深度

时间:2013-01-17 作者:vadims

我想这应该很容易,但我还没有找到合适的解决方案。

我想限制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 );
非常感谢您的帮助

1 个回复
最合适的回答,由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, 这应该有效:)

结束