Wordpress - WP_Query Multiple OrderBy Meta_Key

时间:2016-01-21 07:14:32

标签: wordpress arguments sql-order-by wp-query meta-key

我想输出一份指南列表,每位指南都有投票和评分。所以我想通过评级和投票来对指南列表进行排序。





示例:




 指南名称评级投票
指南1 10 3
指南2 10 2
指南3 10 1
指南4 9 6
指南5 9 2
  

&#xA ;

所以我必须通过2个meta_key订购指南




  omvp_vote_rating和omvp_total_vote
  
&# xA;


我已经尝试了很多方法让它工作,但还没有得到它。有一种方法我几乎可以使用它,但问题是我无法通过meta_key对它进行排序,我只能通过普通字段来命令它,如 comment_count,modified,date,rand(random),title ... 
所以这是我的代码




  $ args = array(
'post_type'=>'指南',
'meta_key'=>'omvp_vote_rating',
'post_status'=>'发布',
'posts_per_page'=> 20,
'meta_query' =>数组(
数组(
'key'=>'omvp_vote_rating',
'compare'=>'> =',
'value'=> ; 0
),
数组(
'key'=>'omvp_total_vote',
'compare'=>'> =',
'value' => 0
),
),
'orderby'=>数组(
'title'=>'ASC',//<  - 这是工作&# xA;'omvp_total_vote'=>'DESC'//&l t;  - 这不起作用
 ),
 );
 $ wp_query = new WP_Query($ args);
  



2 个答案:

答案 0 :(得分:2)

您可以通过自定义选择查询来执行此操作。

$query = "SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta AS rating ON(
$wpdb->posts.ID = rating.post_id
AND rating.meta_key = 'omvp_vote_rating'
)
LEFT JOIN $wpdb->postmeta AS vote ON(
$wpdb->posts.ID = vote.post_id
AND vote.meta_key = 'omvp_total_vote'
)
WHERE $wpdb->term_taxonomy.term_id = 3

AND $wpdb->posts.post_status = 'publish'
ORDER BY rating.meta_value, vote.meta_value ASC LIMIT 0,20"

$posts = $wpdb->get_results($query, object);

答案 1 :(得分:0)

这是可能的。

试试这个:

'order'     => 'DESC',
'orderby'   => 'omvp_vote_rating omvp_total_vote'

这将根据 omvp_vote_rating omvp_total_vote 按降序对所有指南进行排序。

有关详情,请参阅wp_query中的orderorderby参数。