2016-01-21 8 views
0

Я хочу вывести список руководств, в которых у каждого гида есть голоса и рейтинг. Поэтому я хочу отсортировать список лидеров по рейтингу и голосам.Wordpress - WP_Query Несколько OrderBy Meta_Key

Пример:

Guide Name  Rating Votes 
Guide1   10  3 
Guide2   10  2 
Guide3   10  1 
Guide4   9   6 
Guide5   9   2 

Так что я должен заказать направляющие на 2 meta_key с являются

omvp_vote_rating and omvp_total_vote 

я пытался много много способов, чтобы заставить его работать, но не получил его еще , Существует один способ, которым я почти он работает, но проблема в том, что я не могу получить его на заказ по meta_key, я могу только заказать его нормального поля как comment_count, modified, date, rand (random), title ... Так вот мой код

$args = array(
     'post_type' => 'guides', 
     'meta_key' => 'omvp_vote_rating', 
     'post_status' => 'publish', 
     'posts_per_page' => 20, 
     'meta_query' => array(
      array(
       'key' => 'omvp_vote_rating', 
       'compare' => '>=', 
       'value' => 0 
      ), 
      array(
       'key' => 'omvp_total_vote', 
       'compare' => '>=', 
       'value' => 0 
      ), 
     ), 
     'orderby' => array(
      'title' => 'ASC', //<- This is working 
      'omvp_total_vote' => 'DESC' //<- This is not working 
     ), 
    ); 
$wp_query = new WP_Query($args); 

ответ

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); 
+0

Эй, мне удалось заставить его работать с таким запросом. Проблема в том, что пользователь может выбрать другой порядок, например orderby Title. В моем коде, когда пользователь Orderby Title, ip использует обычный WP_Query ($ args) с 'orderby' => 'title'. Моя проблема заключается в том, что пользователь решает упорядочить заголовок или упорядочить рейтинг, тогда моя композиция цикла меняется, поэтому она идет от «if ($ posts-> has_posts()): while (...» to «if ($ pageposts): global $ post; foreach ($ pageposts ... ", я не совсем уверен, как я мог бы справиться с этим. –

+0

Если я правильно понял вашу проблему, вы можете установить условие if-else на основе полей orderby. –

+0

Да, я правильно понять, но дело в том, что я должен дублировать этот запрос несколько раз, чтобы он соответствовал каждой потребности из переданного значения выпадающего списка –

0

Это возможное.

Попробуйте это:

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

Это будет сортировать все направляющие в порядок, основанный на omvp_vote_rating и omvp_total_vote убывания.

Дополнительную информацию см. В разделах order и orderby с wp_query.

+0

Я попробовал, и заказчик dosen't, похоже, работает. При попытке использовать этот метод список неупорядочен. –