按元值和日期排序不适用于wp_Query

时间:2014-08-28 作者:Alevalentini

我想用上周的特定元值(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的大师们!我请求你的帮助!!

1 个回复
最合适的回答,由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 );

结束