Как принудительно вывести рейтинг товаров в WooCommerce - Web-Global

Как принудительно вывести рейтинг товаров в WooCommerce

12.10.2021 225
Поделиться:

Проблема: В WooCommerce рейтинг товаров выводится только когда у товара есть отзывы с оценкой товара. Нам требуется вывести рейтинг звезд товаров даже если товар еще не оценен. Т.е. Будет пустой рейтинг.

Решение: Для принудительного вывода звездного рейтинга товаров в каталоге / категориях WooCommerce необходимо в файл темы function.php вставить код:



//Вывод рейтинга в звездах в каталог
add_filter('woocommerce_product_get_rating_html', 'your_get_rating_html', 10, 2);
  function your_get_rating_html($rating_html, $rating) {
    if ( $rating > 0 ) {
      $title = sprintf( __( 'Оценка %s из 5', 'woocommerce' ), $rating );
    } else {
      $title = 'Еще не оценено';
      $rating = 0;
    }
    $rating_html  = '<div class="star-rating" title="' . $title . '">';
    $rating_html .= '<span style="width:' . ( ( $rating / 5 ) * 100 ) . '%"><strong class="rating">' . $rating . '</strong> ' . __( 'из 5', 'woocommerce' ) . '</span>';
    $rating_html .= '</div>';
    return $rating_html;
  }

Чтобы на странице товара тоже выводился рейтинг, даже если нет комментариев с оценками, необходимо изменить файл /wp-content/plugins/woocommerce/templates/single-product/rating.php [сначала копируем файл из папки плагина в нашу тему папку /wp-content/themes/mytheme/woocommerce/single-product/]. В представленном коде нужно убрать конструкцию if: if ( $rating_count > 0 ) :.



if ( $rating_count > 0 ) : /* удаляем условие (внимательней - закрывающий тег php должен остаться) */ ?>

	<div class="woocommerce-product-rating">
		<?php echo wc_get_rating_html( $average, $rating_count ); ?>
		<?php if ( comments_open() ) : ?><a href="<?php echo get_permalink( $product->get_id() ); ?>#reviews" class="woocommerce-review-link">(<?php printf( _n( '%s customer review', '%s customer reviews', $review_count, 'woocommerce' ), '<span class="count">' . esc_html( $review_count ) . '</span>' ); ?>)</a><?php endif ?>
	</div>
<?php endif; /* Удаляем конец if */ ?>