Показать общее количество отзывов и оценок клиентов в WooCommerce - PullRequest
0 голосов
/ 31 мая 2018

Я хочу отобразить общее количество отзывов клиентов на главной странице, я пробовал этот метод:

<?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 голосов
/ 31 мая 2018

Обновление (Предотвращение ошибки последней функции, когда еще нет отзывов)

Ниже вы найдете 4 пользовательские функциичто даст вам:

  1. Общее количество отзывов о товарах
  2. Данные подсчета оценок товаров, которые будут использоваться в:
    • Количество товаров по рейтингу html
    • Средний рейтинг продукции html

КОД ФУНКЦИЙ:

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;
}

Код входит в функциюФайл .php вашей активной дочерней темы (или активной темы).Проверено и работает.

ИСПОЛЬЗОВАНИЕ

  1. Всего отзывов покупателей:

    echo '<p>'.__('Total reviews','woocommerce').': '.get_total_reviews_count().'</p>';
    
  2. Продукциякол-во по рейтингу:

    echo products_count_by_rating_html();
    
  3. Средняя оценка по продукту:

    echo products_rating_average_html();
    
...