我尝试运行一个自定义的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标题;说明;
最合适的回答,由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);