如何使用标准的QUERY_POST按多个字段排序?

时间:2015-03-05 作者:hawbsl

在我们的archive.php 我们将显示与所选类别匹配的所有项目。这工作非常好。

然后,我们对其进行了改进,添加了一个排序(就在循环之前),并将每页的帖子数从默认的10个增加到了10个,如下所示:

$posts = query_posts($query_string . \'&orderby=title&order=asc&posts_per_page=99\'); 
这更有效。

现在,我们想按多个字段进行排序,比如menu_order 然后title. 我看不到使用我们现有的query\\u posts/querystring语法可以做到这一点。代码示例都涉及启动一个新的WP\\u查询,从而失去对Query\\u字符串的跟踪。解决方案是什么?

2 个回复
最合适的回答,由SO网友:Milo 整理而成

如果要更改主查询,请始终使用pre_get_posts 在运行查询和加载模板之前更改查询参数。这将是最有效的,不会中断分页。自v4起,orderby 接受参数数组,这使您能够order 如有必要,针对每个:

function my_get_posts( $query ){
    if( !is_admin() && $query->is_category() && $query->is_main_query() ){
        $query->set( \'posts_per_page\', -1 ); // show all posts
        $query->set( \'orderby\', array(\'menu_order\' => \'ASC\', \'title\' => \'ASC\') );
    }
}
add_action( \'pre_get_posts\', \'my_get_posts\' );

SO网友:mjakic

可以按多个列进行排序。看见here.

$args = array(
    \'posts_per_page\' => 99,
    \'orderby\'   => \'menu_order title\',
    \'order\'     => \'ASC\',
);

$query = new WP_Query( $args );
// do your stuff here...

wp_reset_postdata();
退房standard loop 以及为什么要使用wp_reset_postdata.

结束

相关推荐

Stuck in the query loop

我在WordPress页面中创建了一个双循环。它应获取类别名称,并应加载类别名称下的所有子级。像这样____Cat1类______产品1产品2产品3____Cat2类______产品1产品2产品3所以问题是,当产品在循环时,类别名称也在循环,所以如果我有3个产品在cat名称下,我也会有3个cat名称。这是我的代码:<div class=\"pr_grid_cell clearfix\"> <?php //for each category, show posts