Tính đánh giá trung bình cho toàn bộ sản phẩm WooCommerce

Lại Đình Cường

Tài liệu thiết kế website

Đố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.

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất