排序:定制查询,先按meta_value_num排序,然后按标题排序

时间:2013-06-16 作者:kyii

我尝试运行一个自定义的post类型查询,以匹配以下条件:
首先按年份降序排序电影,然后按标题字母顺序(“年内顺序”)。

所需输出:
电影标题A,2006
电影标题Z,2006
<1996年电影片名A

我使用以下代码:

$wp_query = new WP_Query();
$wp_query->query( array(
\'post_type\' => \'movies\', 
                      \'distribution\' => \'companyA\', 
                      \'meta_key\' => \'year\',
                      \'orderby\' => \'meta_value_num title\',  
                      \'order\' => \'DESC\', 
                      \'posts_per_page\' => -1, 
                      \'post_status\' => \'publish\',
));
我尝试了几种方法,但我只能得到这个“相反”的结果:

电影片名A,1996年电影片名Z,1996年<2006年电影片名A

如果我更改DESC,ASC,它只会更改标题排序。但我需要把它应用到今年,而不是标题上。

使用两个orderby值是否正确?还是必须使用meta\\u查询或自定义SQL?

thx提前!

以下是从中生成的SQL查询$GLOBALS[\'wp_query\']->request

选择;wp\\U岗位*
来自  ;wp\\U帖子      ;内部;加入;wp\\U term\\u关系
              ;在上;( ;wp\\u posts.id= ;wp\\u term\\u relationships.object\\u id)
      ;内部;加入;wp_Posteta
              ;在上;( ;wp\\u posts.id= ;wp\\u postmeta.post\\u id)
其中 ;1个= ;1
      ;和;( ;wp\\U term\\U relationships.term\\U taxonomy\\U id;IN)( ;24) ;)
      ;和;wp\\U岗位。post\\u类型= ;\'电影      ;和;( ;wp\\u posts.post\\u status=“发布”)
      ;和;( ;wp\\u postmeta.meta\\u key=“年”)
集团 ;由;wp\\U岗位。id订单 ;由;wp\\U邮差。meta\\u值+ ;0,
         ;wp\\U岗位。post\\u标题;说明;

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

这很粗糙,但应该按年份(meta\\u值)然后按标题对您的帖子进行排序。它确实取决于查询的设置方式,因此它只能用于下面的查询或类似的查询。

function alter_order_wpse_103181($order,$qry) {
  remove_filter(\'posts_orderby\',\'alter_order\',1,2);
  $order = explode(\',\',$order);
  $order = implode( \' ASC,\',$order);
  return $order;
}
add_filter(\'posts_orderby\',\'alter_order_wpse_103181\',1,2);

$q = new WP_Query();
$q->query( array(
  \'post_type\' => \'movies\', 
  \'distribution\' => \'companyA\', 
  \'meta_key\' => \'year\',
  \'orderby\' => \'meta_value_num title\',  
  \'order\' => \'ASC\', 
  \'posts_per_page\' => -1, 
  \'post_status\' => \'publish\',
));
var_dump($q->request);

SO网友:Rarst

你的问题与orderby 与…一样order. 虽然orderby 接受多个值,您的使用似乎正常,order 仅接受ASC or DESC.

消毒后order 附加到的输出orderby 正在处理。如果我理解正确的逻辑,那就意味着orderby 参数,order 将应用于列出的最后一个。

尝试反转orderby\'title meta_value_num\' 因此,标题在默认情况下进行排序order 适用于年份而不是标题。

结束

相关推荐

Categories sorting

我正在使用下面的代码来弹出自定义帖子类型及其类别,所以类别1---岗位1---岗位2第二类——岗位1——岗位2——岗位3等。这对我来说很好,但是我希望能够按count对我的类别进行排序,所以orderby=count,这样,在我下面的代码中不起作用的时候,具有大量帖子的类别将排在列表的顶部,知道为什么吗?非常感谢您的帮助 <?php // List posts by the terms for a custom taxonomy of any post type