【发布时间】:2016-09-28 20:39:57
【问题描述】:
我有一种不同类型的邮购订单,我正试图退回它,但在任何地方都找不到答案。我正在使用 wp_query 尝试通过元值列表对帖子进行排序。但是,标准的 orderby 选项都不是我想要实现的。
我的元值存储为逗号列表字符串,如下所示:
1、5、10、3、21、6
然后我抓取这些值并将它们分解为一个数组,如下所示:
$banner_nums = get_option('banner_numbers');
$nums_array = explode( ',', $banner_nums );
我做了一个标准的 wp_query,但问题是,我试图按照我的 $banner_nums 变量中的实际顺序来排序这些帖子的显示,而不是按照任何正常的 wp_query orderby,例如“ID”、“date” , 'title', 'meta_value' 等。
显示如下:
第一个:发布 meta_value = 1
第 2 次:发布 meta_value = 5
3rd:发布 meta_value = 10
第 4 次:发布 meta_value = 3
第 5 次:发布 meta_value = 21
第 6 次:发布 meta_value = 6
例如,如果我想将 meta_value = 6 的帖子显示为第二个帖子,我会将我的列表更改为:1、6、5、10、3、21。
这是我的查询,可以很好地抓取我的帖子,但我无法让它们正确排序。
$slider_args = array(
'post_type' => 'property',
'posts_per_page' => -1,
'nopaging' => true
);
$my_query = array();
foreach( $nums_array as $k => $v ) {
$my_query[$k]['key'] = 'property_id';
$my_query[$k]['value'] = $v;
$my_query[$k]['compare'] = '=';
}
$slider_args['meta_query'] = $my_query;
$slider_args['meta_query']['relation'] = 'OR';
$slider_query = new WP_Query( $slider_args );
if ( $slider_query->have_posts() ) {
stuff...
}
打印我的 $slider_args 看起来像这样,看起来不错:
[post_type] => property
[posts_per_page] => -1
[nopaging] => 1
[meta_query] => Array
(
[0] => Array
(
[key] => property_id
[value] => 1
[compare] => =
)
[1] => Array
(
[key] => property_id
[value] => 5
[compare] => =
)
[2] => Array
(
[key] => property_id
[value] => 10
[compare] => =
)
[3] => Array
(
[key] => property_id
[value] => 3
[compare] => =
)
[4] => Array
(
[key] => property_id
[value] => 21
[compare] => =
)
[5] => Array
(
[key] => property_id
[value] => 6
[compare] => =
)
[relation] => OR
)
我只是不知道如何以正确的顺序显示帖子
1、5、10、3、21、6
我希望我说得有道理?非常感谢任何帮助。
【问题讨论】:
-
它将在查询找到帖子时对帖子进行排序。您可以对帖子进行 foreach 循环,以按照您想要的方式使用。如果这是一个集合查询,请将其缓存以节省性能。