您应该能够通过连接wp\\U comments表中的数据来实现这一点,因为该表包含有关哪些评论属于哪些帖子的信息
$sql = $wpdb->prepare( "
SELECT meta_value
FROM {$wpdb->prefix}commentmeta
INNER JOIN {$wpdb->prefix}comments ON {$wpdb->prefix}commentmeta.comment_id = {$wpdb->prefix}comments.comment_ID
WHERE comment_post_ID = %d AND meta_key = \'rating\' ", get_the_ID()
);
$results = $wpdb->get_results( $sql );
请注意,MySQL可以为您求和,您不需要使用PHP进行求和。
更新日期:
通过下面的查询,您可以计算当前帖子的五星级评分数
$sql = $wpdb->prepare( "
SELECT count(meta_value)
FROM {$wpdb->prefix}commentmeta
INNER JOIN {$wpdb->prefix}comments ON {$wpdb->prefix}commentmeta.comment_id = {$wpdb->prefix}comments.comment_ID
WHERE comment_post_ID = %d AND meta_key = \'rating\' AND meta_value = \'5\' ", get_the_ID()
);
$wpdb->get_var( $sql );
尽管您在foreach循环中迭代评级,但在循环中,您可以计算5星级评级,而无需像这样运行第二个查询
$rating5 = 0;
foreach($results as $result){
if( $result->meta_value == \'5\' ) {
$rating5++;
}
$rate = $result->meta_value;
$sum +=$rate;
}