我有一个自定义的帖子类型,我希望能够通过定义数组中的顺序来控制帖子的显示顺序,然后对照数组检查posts meta\\u值,查看它在帖子顺序中的位置。
使用下面的代码,我可以得到经销商,他们的“Postcode”是距离当前用户位置最近的10个邮政编码的$target\\u邮政编码数组中定义的值之一。
$posts = get_posts(array(
\'post_type\' => \'dealer\',
\'meta_key\' => \'Postcode\',
\'meta_value\' => $target_postcodes,
\'post_status\' => \'publish\'
));
我是否可以按照“meta\\u values”查询中的值的顺序对帖子进行排序?
例如,如果我们使用以下post值:
[Name] [Postcode]
Dealer 1 1234
Dealer 2 2345
Dealer 3 3456
Dealer 4 4567
然后将$target\\u邮政编码数组定义为
$target_postcodes = 4567,1234,3456,2345
然后我希望循环按以下顺序显示经销商
Dealer 4
Dealer 1
Dealer 3
Dealer 2
谢谢Brad
最合适的回答,由SO网友:Brad Farleigh 整理而成
最后,我分别查询了每个邮政编码,然后使用array\\u merge将结果编译到$posts[]数组中。这意味着最后的$posts[]数组按距离顺序包含我的所有帖子,我可以正常循环浏览它。
我理解这是一种非常不完善的方法,如果有人能提供一些反馈/改进,我将不胜感激!
代码如下所示:
/** My array of postcodes, from closest to farthest**/
$postcodes[1111,2222,3333,4444,5555];
/**
Loop through each postcode and grab all the dealers
where the postcode matches the one in that loop
**/
foreach($postcodes as $the_postcode){
$subSet = get_posts(array(
\'post_type\' => \'dealer\',
\'meta_key\' => \'Postcode\',
\'meta_value\' => $the_postcode,
\'post_status\' => \'publish\'
));
/**
Append the new results to the the end of the $posts array
**/
$posts = array_merge($posts,$currentSet);
}
/** Display final list of post titles in the order of values defined in $postcodes**/
if($posts)
{
foreach($posts as $post)
{
echo the_title().\'<br />\';
}
}