【发布时间】:2018-01-29 13:06:59
【问题描述】:
创建帖子 ID 的平面数组后,我想通过自定义查询以与数组中相同的顺序显示这些帖子。 The doc 声明 'post__in' “保留在 'post__in' 数组中给出的帖子 ID 顺序”。然而在我的情况下它没有。为什么?
创建我的帖子 ID 数组:
if (have_rows('cases')):
while (have_rows('cases')) : the_row();
$array_cases[] = get_sub_field('case');
endwhile;
endif;
print_r($array_cases);
结果:
Array(
[0] => 2959
[1] => 919
[2] => 914
...)
WP_Query():
$args = array(
'post_type' => 'iw-project',
'post__in' => $array_cases,
'orderby' => 'post__in');
$query_cases = new WP_Query($args);
print_r($query_cases);
结果:
WP_Query Object(
...
[posts] => Array(
[0] => WP_Post Object (
[ID] => 2959
...)
[1] => WP_Post Object (
[ID] => 914
...)
[2] => WP_Post Object (
[ID] => 1974
...)
结果查询中的顺序错误。第二个和第三个帖子应该是919和914,而不是914和1974。
以下是 Kodos Johnson 请求的 WP_Query 对象的原始 SQL:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_icl_translations t
ON wp_posts.ID = t.element_id
AND t.element_type = CONCAT('post_', wp_posts.post_type) WHERE 1=1 AND wp_posts.ID IN (2959,919,914,1593,1583,1974,1649,993,675) AND wp_posts.post_type = 'iw-project' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled') AND ( ( t.language_code = 'en' AND wp_posts.post_type IN ('post','page','iw-project','iw-contact','iw-slide','iw-client' ) ) OR wp_posts.post_type NOT IN ('post','page','iw-project','iw-contact','iw-slide','iw-client' ) ) ORDER BY wp_posts.menu_order, FIELD( wp_posts.ID, 2959,919,914,1593,1583,1974,1649,993,675 ) LIMIT 0, 8
【问题讨论】:
-
你能确认 919 后在你的结果数组中吗?帖子 919 是否有帖子类型“iw-project”并且它没有被删除?我根本没有在您的结果中看到 919。因此,也许它根本无法与您的查询条件匹配。
-
好问题。但是,是的,在第 7 位。它确实属于“iw-project”帖子类型。
-
您能否尝试此处接受的答案发布的所有解决方案,并让我知道它是否有效? wordpress.stackexchange.com/questions/220014/…
-
我刚刚尝试安装 wordpress 来重现您的问题,但我无法重现它。我的查询正确地保留了
post__in数组中的帖子顺序(即使没有添加order参数)。你能尝试从你的 wp_query 对象中获取原始 sql 吗?您可以通过像这样打印出请求属性来做到这一点:print_r($query_cases->request)。那应该给你原始的SQL。编辑您进入问题的 SQL。 -
@KodosJohnson 谢谢,我编辑了我的问题并添加了原始 SQL
标签: wordpress