Đối với mỗi sản phẩm đều có lưu đánh giá trung bình. Nếu muốn tính đánh giá trung bình cho toàn bộ sản phẩm của WooCommerce, hãy thử dùng hàm bên dưới:
function calculate_average_rating_for_all_products() {
global $wpdb;
$query = "
SELECT
SUM(CAST(pm.meta_value AS DECIMAL(10,2)) * CAST(pr.meta_value AS UNSIGNED)) AS total_rating,
SUM(CAST(pr.meta_value AS UNSIGNED)) AS total_reviews
FROM {$wpdb->prefix}postmeta pm
INNER JOIN {$wpdb->prefix}postmeta pr
ON pm.post_id = pr.post_id
INNER JOIN {$wpdb->prefix}posts p
ON pm.post_id = p.ID
WHERE p.post_type = 'product'
AND p.post_status = 'publish'
AND pm.meta_key = '_wc_average_rating'
AND pr.meta_key = '_wc_review_count'
AND CAST(pr.meta_value AS UNSIGNED) > 0
";
$results = $wpdb->get_row( $query );
if ( $results && $results->total_reviews > 0 ) {
$average_rating = $results->total_rating / $results->total_reviews;
return round( $average_rating, 2 );
}
return 0;
}
Đối với các trang shop có nhiều sản phẩm, có thể lưu cache với transient để giới hạn số lần truy vấn, giúp tải trang nhanh hơn.