我想在首页上显示客户评论的总数,我尝试了这种方法:
<?php $args = array( 'status' => 'approve', 'post_status' => 'publish', 'post_type' => 'product' ); $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); $count = get_comment_count($comments); ?> <span class="total_reviews"> <?php echo $count['approved'] . ' reviews' ?> </span>
但是没有按我想要的那样工作!例如,我有4条评论,此代码仅显示(1条评论),而不是(4条评论)。
关于平均水平,我对主页上的工作方式一无所知,我只知道如何使用下面的代码在单个产品页面上实现此功能:
$average = $product->get_average_rating();
但是,此代码仅适用于单个产品的平均评分,而不是我想要的所有评论的全球平均值。
任何帮助表示赞赏。
更新 (在没有评论的情况下避免最后一个函数的错误)
在下面,您将找到4个自定义函数,这些函数将为您提供:
功能代码:
function get_total_reviews_count(){ return get_comments(array( 'status' => 'approve', 'post_status' => 'publish', 'post_type' => 'product', 'count' => true )); } function get_products_ratings(){ global $wpdb; return $wpdb->get_results(" SELECT t.slug, tt.count FROM {$wpdb->prefix}terms as t JOIN {$wpdb->prefix}term_taxonomy as tt ON tt.term_id = t.term_id WHERE t.slug LIKE 'rated-%' AND tt.taxonomy LIKE 'product_visibility' ORDER BY t.slug "); } function products_count_by_rating_html(){ $star = 1; $html = ''; foreach( get_products_ratings() as $values ){ $star_text = '<strong>'.$star.' '._n('Star', 'Stars', $star, 'woocommerce').'<strong>: '; $html .= '<li class="'.$values->slug.'">'.$star_text.$values->count.'</li>'; $star++; } return '<ul class="products-rating">'.$html.'</ul>'; } function products_rating_average_html(){ $stars = 1; $average = 0; $total_count = 0; if( sizeof(get_products_ratings()) > 0 ) : foreach( get_products_ratings() as $values ){ $average += $stars * $values->count; $total_count += $values->count; $stars++; } return '<p class="rating-average">'.round($average / $total_count, 1).' / 5 '. __('Stars average').'</p>'; else : return '<p class="rating-average">'. __('No reviews yet', 'woocommerce').'</p>'; endif; }
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。
用法
客户评论总数:
echo '<p>'.__('Total reviews','woocommerce').': '.get_total_reviews_count().'</p>';
按评分列表计数的产品:
echo products_count_by_rating_html();
产品平均评价:
echo products_rating_average_html();