Wordpress - WP_Query 多个 OrderBy Meta_Key
Wordpress - WP_Query Multiple 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 );
有可能。
试试这个:
'order' => 'DESC',
'orderby' => 'omvp_vote_rating omvp_total_vote'
这将根据 omvp_vote_rating 和 [=29= 对所有 guides 进行降序排序].
有关更多参考,请参阅 wp_query 中的 order
和 orderby
参数。
您可以通过自定义 select 查询来实现。
$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);
我想输出一个指南列表,其中每个指南都有投票和评分。所以我想按评分和投票对指南列表进行排序。
示例:
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 );
有可能。
试试这个:
'order' => 'DESC',
'orderby' => 'omvp_vote_rating omvp_total_vote'
这将根据 omvp_vote_rating 和 [=29= 对所有 guides 进行降序排序].
有关更多参考,请参阅 wp_query 中的 order
和 orderby
参数。
您可以通过自定义 select 查询来实现。
$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);