我在那里有我正在使用的代码,我试图从$menus数组中按did的顺序获取帖子,但没有这样做,他给了我从最新到最旧的帖子……我尝试将order与DESC一起使用,但数组没有改变。
$menus = array(105, 54, 111);
$args = array(
'post__in' => $menus,
'orderby' => 'ID',
'order' => 'DESC',
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
$i = 1;
while ( $query->have_posts() ) : $query->the_post();
do_action('fwp_before_post_content');
get_template_part('extend-helpers/' . $layout);
do_action('fwp_after_post_content');
$i++;
endwhile;
else:
get_template_part('extend-helpers/content', 'none');
endif;更新:
这些帖子来自不同的类别。
更新II:
SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.ID IN (105,54,111) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') ORDER BY wp_posts.menu_order, FIELD( wp_posts.ID, 105,54,111 ) LIMIT 0, 1000" 为什么我有ORDER BY wp_posts.menu_order?因为在$args中我没有orderby menu_order。
发布于 2017-12-03 04:22:41
您需要在传递给WP_Query的args中添加"orderby“项。
发布于 2017-12-03 04:32:15
你见过WP_query循环吗?https://code.tutsplus.com/tutorials/mastering-wp_query-using-the-loop--cms-23031。它使用$args=ASC和DSC以及'orderby‘=>'id’。
发布于 2017-12-04 00:05:36
对于第一部分,您希望按照Juan在他的评论中的建议,在orderby行中也使用post__in。从文档中:'post__in‘-保留'post__in’数组中给出的帖子ID顺序。因此,您的代码应该如下所示
$menus = array(55, 53, 57); // I have used mine ids
$args = array(
'post__in' => $menus,
'orderby' => 'post__in',
);
$query = new WP_Query( $args );对于第二部分,也就是更重要的部分,您为什么要使用ORDER BY wp_posts.menu_order。你也可以在评论中找到答案。查询正在被某些东西(主题或插件)更改,检查pre_get_posts挂钩,尝试切换主题等。
我已经测试了这段代码,它正在工作,所以它按照数组$menus中的方式对帖子进行了排序。
https://stackoverflow.com/questions/47612119
复制相似问题