繁体   English   中英

无法订购WordPress帖子

[英]Can't order wordpress posts

我有我正在使用的代码,我试图从$menus数组中按ID的顺序获取帖子,但不这样做,他给了我最新到最旧的帖子...我尝试对DESC使用order ,但是数组没有更改。

$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;

更新:

这些帖子来自不同的类别。

更新二:

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。

你需要在你通过WP_Query的ARGS添加“排序依据”项目。

您可以在这里找到文档

您是否看到过WP_query循环? https://code.tutsplus.com/tutorials/mastering-wp_query-using-the-loop--cms-23031 它也使用$ args = ASC和DSC和'orderby'=>'id'。

对于第一部分,您也想像 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中的顺序对帖子进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM