我想用上周的特定元值(mb\\u home!=0)选择帖子和自定义帖子类型,并按mb\\u home排序。如果它们具有相同的mb\\U home值,我希望它们按日期排序。两个订单都必须说明。
我正在使用此查询,但它不起作用:
$query = new WP_Query( array(
\'post_type\' => array (\'post\', \'aggregato\'),
\'posts_per_page\' => 13,
\'post__not_in\' => $linked_posts,
\'meta_key\' => \'mb_home\',
\'orderby\' => \'meta_value_num date\',
\'order\' => \'DESC\',
\'meta_query\' => array(
array(
\'key\' => \'mb_home\',
\'value\' => \'0\',
\'compare\' => \'>\',
)
),
\'date_query\' => array(
\'after\' => \'1 week ago\',
)
));
如果我放弃
date
和使用
\'order by\' => \'meta_value_num\'
查询返回按mb\\U home DESC正确排序的结果。但如果它们具有相同的mb\\U home值,则按日期ASC排序。
如果我试图改变我订购东西的方式,请使用以下语法:
\'orderby\' => array( \'meta_value_num\' => \'DESC\', \'date\' => \'DESC\' ),
与上面的orderby和order语句不同,它只是返回到date DESC,完全忽略mb\\u home值。
所有这些结果与meta_value
而不是meta_value_num
. 没有任何变化。
请给我一些建议,因为我已经研究这个问题将近一个月了,尝试了所有的方法,但都没有成功。
哦,wordpress的大师们!我请求你的帮助!!
最合适的回答,由SO网友:bonger 整理而成
您必须使用posts_orderby
过滤器在生产任务单上执行此操作,例如
function wpse159469_posts_orderby( $orderby, $query ) {
return implode( \' DESC,\', explode( \',\', str_replace( array(\' ASC\', \' DESC\' ), \'\', $orderby ) ) ) . \' DESC\';
}
然后围绕您的查询:
add_filter( \'posts_orderby\', \'wpse159469_posts_orderby\', 10, 2 );
$query = new WP_Query( array( // etc
remove_filter( \'posts_orderby\', \'wpse159469_posts_orderby\', 10 );