显示WooCommerce中的平均客户评论和评分

时间:2018-05-30 21:02:23

标签: php sql wordpress woocommerce product

我想在首页上显示客户评论总数,我尝试过这种方法:

<?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();

但是,此代码仅针对单个产品的平均评分,而不是我想要的所有评论的全球平均值。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

  

更新 (在没有评论时避免上一个功能出错)

下面你会发现4个自定义功能:

  1. 总产品评论数
  2. 产品评级计数数据,将用于:
    • 产品按评级输出html计算
    • 产品评级平均输出html
  3. 功能代码:

    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文件中。经过测试和工作。

    <强> USAGE

    1. 客户评论总数:

      echo '<p>'.__('Total reviews','woocommerce').': '.get_total_reviews_count().'</p>';
      
    2. 产品按评级列表计算:

      echo products_count_by_rating_html();
      
    3. 产品评级平均值:

      echo products_rating_average_html();