你所面临的问题是“我如何做X?”这不是一步一步的行动,而是一个多步骤的过程,需要将其分解。
您不需要这样做:
get all the posts that are a child of X ordered by meta
您需要执行以下操作:
get all the posts that are a child of X
for each child, get all the posts that are a child
foreach child of that child get all the posts that are a child
...
hmmm we don\'t have any more children left
Take our list of posts and order them by meta
因此,要理解如何无限地执行它,直到到达终点,而不必对其进行硬编码,您需要理解递归函数。
e、 g。
function make_zero( $amount ) {
$amount = $amount - 1;
if ( $amount > 1 ){
return make_zero( $amount );
}
return $amount;
}
将递归应用于此问题以获得解决方案
$parid
, 你的贴子元有一个键
$metakey
.
让我们将其传递到函数中以获取其子级。
$children = get_children_with_meta( $parid, $metakey );
然后我们将对$children数组进行排序,键将是post id,值将是meta值。
asort($children);
让我们将函数定义为:
function get_children_with_meta( $parent_id, $metakey ) {
$q = new WP_Query( array( \'post_parent\' => $parent_id, \'meta_key\' => $metakey ));
if ( $q->have_posts() ) {
$children - array();
while ( $q->have_posts() ) {
$q->the_post();
$meta_value = get_post_meta(get_the_ID(), $metakey, true );
$children[get_the_ID() ] = $meta_value;
}
return $children;
} else {
// there are no children!!
return array();
}
}
这将为您提供一个post ID和值的数组,按从低到高的顺序排列。您可以使用其他PHP排序函数从高到低进行排序。
那么孩子们的孩子们呢
在循环的中间,我们需要进行递归调用,传入子ID而不是父ID。
因此:
$q->the_post();
$meta_value = get_post_meta(get_the_ID(), $metakey, true );
$children[get_the_ID() ] = $meta_value;
变成这样:
$q->the_post();
$meta_value = get_post_meta(get_the_ID(), $metakey, true );
$children[get_the_ID() ] = $meta_value;
// now get the childrens children
$grandchildren = get_children_with_meta( get_the_ID(), $metakey );
// merge the grandchildren and the children into the same list
$children = array_merge( $children, $grandchildren );
通过此修改,函数现在检索子对象、子对象、子对象的子对象。。。。。等
最后,可以修剪数组上的值以获得如下ID:
$post_ids = array_keys( $children );
$q = new WP_Query( array( \'post__in\' => $post_ids );
// etc
使用此策略,您可以用任何其他度量替换元键值,或者以其他方式使用递归函数。
由于完整的代码只需要几秒钟的基本理解和快速复制粘贴,我不会用完整的复制粘贴代码块来侮辱你的智慧。
优点通过修改,可以对任何post类型和形式的数据进行修改,以生成嵌套标记。通过将返回的数组置于瞬态中,可以轻松缓存以加快速度。可以通过将分页应用于WP\\U查询的末尾来设置分页您已经找到了它们,因此性能成本不会按比例增加您想要的内容将生成大量查询,而且由于涉及到潜在的深度,因此成本固有我的建议
我建议您要么扁平化页面层次结构,要么使用分类法。E、 g.如果你正在对帖子进行评级,请使用带有1、2、3、4和5等术语的页面评级分类法。这将为你提供开箱即用的帖子列表。或者,使用导航菜单并完全绕过此问题