我不知道ACF是如何工作的,也不知道它的数据是如何存储的,但一般来说,我只会使用usort()
通过的ACF值对返回的术语数组进行排序cognome_nome
. 请注意array_push
使用起来有点贵,所以尽量避免;-)
正如我在评论中所说,您的代码对我来说没有多大意义。你有两个独立的foreach
循环,这很好,但您正在尝试使用第一个foreach
循环值($term
)在第二个中,这将不起作用。在a中foreach
循环,最后一个键的值保持在foreach
循环,这意味着$term
将始终设置为最后一个学期。因为这个,因为你使用$term
在你的第二个foreach
按原样循环,所有值都将设置为$terms
对象这正是你所看到的。
总的来说,这就是我解决这个问题的方式
$terms = get_terms( \'authors\', $args );
/**
* Remember the usort bug. Use @usort to cut the bug\'s wings and feet ;-)
*/
@usort( $terms, function ( $a, $b )
{
/**
* Get our ACF Data
* Just make sure that my logic is correct here and that you actually get data from get_field
*/
$array_a = get_field( \'cognome_nome\', $a );
$array_b = get_field( \'cognome_nome\', $b );
if ( $array_a ) {
$sort_a = $array_a;
} else {
$sort_a = \'zzz\'; //Kind of fall back to add posts without field last
}
if ( $array_b ) {
$sort_b = $array_b;
} else {
$sort_b = \'zzz\'; //Kind of fall back to add posts without field last
}
// Sort by these ACF data
return strcasecmp ( $sort_a, $sort_b );
});
这将负责排序。然后,您就可以正常地循环使用术语,并像通常那样输出它们