Удалить звездочки отзывов, если нет отзывов в магазине WooCommerce и архивах

#php #wordpress #woocommerce #product #rating

#php #wordpress #woocommerce #продукт #Оценка

Вопрос:

Я хочу не отображать звездочки на товарах в цикле страницы магазина. Мой текущий код не работает…

Я работаю над сайтом WooCommerce с Astra.

 function no_stars_if_no_reviews() {
    global $product;
    if ($average = $product->get_average_rating()) :
if($average > 0) {
remove_filter(get_average_rating);
}
}
  

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

Комментарии:

1. Почему назначение завернуто в if()? А вы где-нибудь определяли константу с именем get_average_rating ? Если нет, вы, вероятно, имели в виду использовать текстовый литерал в этом месте, а не константу.

2. функция no_stars_if_no_reviews() { глобальный $ продукт; $ среднее значение = $product->get_average_rating(); если ($среднее значение > 0) { remove_filter(get_average_rating);} } Будет ли это работать лучше?

3. У меня получилось! Для всех, кто там работает, это сработало! функция no_stars_if_no_reviews() { глобальный $ продукт; $среднее значение = $product->get_average_rating() ; если ($среднее значение > 3) { echo (‘<div class=»звездный рейтинг»><span style=»ширина:’.( ( $среднее значение / 5 ) * 100 ) . ‘%»>< strong itemprop=»ratingValue» class=»rating»>’.$average.'</strong> ‘.__( ‘из 5’, ‘woocommerce’).'</span></div>’); } else { return; } } add_action ( ‘astra_woo_shop_title_after’, ‘no_stars_if_no_reviews’);

Ответ №1:

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

 add_action( 'woocommerce_after_shop_loop_item_title', 'conditionally_remove_loop_rating', 4 );
function conditionally_remove_loop_rating(){
    global $product;

    if( ! ( $product->get_review_count() > 0 ) ) {
        remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
    }
}
  

Код отправляется в function.php файл вашей активной дочерней темы (или active theme). Протестировано и работает.

Комментарии:

1. remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 ); кажется, это больше не работает. Можно заменить?

2. @ВладимирКятипов Это все еще работает в последней версии WooCommerce, смотрите в content-product.php файле шаблона … Если у вас это не работает, это может быть связано с настройками вашей темы или плагина…

3. Привет, я недавно тестировал этот код, и он не соответствует. Например, на странице категории товаров иногда у продукта нет отзывов, звездочки скрыты, но при нажатии на сам продукт на странице сведений действительно отображаются отзывы.