Как получить данные рейтинга одиночной страницы для формирования своей разметки и при етом отключить текущую разметку?
И как проверить на каком типе записи я нахожусь будь то товар или статья
как то так:
add_action('wp','get_custom_rating_data'); function get_custom_rating_data(){ global $post; //если не одиночная страница или тип записи не 'post' if(!is_singular() || $post->post_type!='post') return false; $ratingBox = new Rcl_Rating_Box(array( 'rating_type' => 'post', //тип записи 'object_id' => $post->ID, //ИД записи 'author_object' => $post->post_author //автор записи )); //тут инициализируем все данные $ratingBox->setup_box(); //максимальный рейтинг $ratingBox->vote_max; //кол-во голосов $ratingBox->vote_count; //минимальное значение $item_value = round( $ratingBox->vote_max / $ratingBox->item_count, 1 ); //среднее значение всех голосов (выводится для звезд в качестве значения) $average_rating = $ratingBox->vote_count? round( $ratingBox->total_rating / $ratingBox->vote_count, 1 ): 0; }
пока отключить вывод текущей разметки нельзя
Добавил в существующую json разметку
global $post; $ratingBox = new Rcl_Rating_Box(array( 'rating_type' => 'post', //тип записи 'object_id' => $post->ID, //ИД записи 'author_object' => $post->post_author //автор записи )); //тут инициализируем все данные $ratingBox->setup_box(); //максимальный рейтинг $ratingBox->vote_max; //кол-во голосов $ratingBox->vote_count; //минимальное значение $item_value = round( $ratingBox->vote_max / $ratingBox->item_count, 1 ); //среднее значение всех голосов (выводится для звезд в качестве значения) $average_rating = $ratingBox->vote_count? round( $ratingBox->total_rating / $ratingBox->vote_count, 1 ): 0; "aggregateRating" => array( "@type" => "AggregateRating", "bestRating" => $ratingBox->vote_max, "worstRating" => "$item_value", "ratingValue" => "$average_rating", "ratingCount" => $ratingBox->vote_count ),
Правильно ли я делаю со значениями item_value и average_rating?
обнови плагин до версии 16.9.1 и используй код:
add_action('wp','get_custom_rating_data'); function get_custom_rating_data(){ global $post; //если не одиночная страница или тип записи не 'post' if(!is_singular() || $post->post_type!='post') return false; $ratingBox = new Rcl_Rating_Box(array( 'rating_type' => 'post', //тип записи 'object_id' => $post->ID, //ИД записи 'object_author' => $post->post_author //автор записи )); //тут инициализируем все данные $ratingBox->setup_box(); //максимальный рейтинг $ratingBox->vote_max; //кол-во голосов $ratingBox->vote_count; //минимальное значение $item_value = round( $ratingBox->vote_max / $ratingBox->item_count, 1 ); //среднее значение всех голосов (выводится для звезд в качестве значения) $average_rating = $ratingBox->vote_count? round( $ratingBox->total_rating / $ratingBox->vote_count, 1 ): 0; }
была исправлена ошибка
Спасибо, все работает
Еше мелкие вопросы:
1. При отключенной разметке продукта не могу получить его рейтинг со страницы (
)
2. Как отличить страницу продукта от статьи, есть ли какие условия или проверки?
При отключенной разметке продукта не могу получить его рейтинг со страницы (пример)
не понял этой проблемы, значения рейтинга не выводятся?
SAZONISCHE сказал(а)
Как отличить страницу продукта от статьи, есть ли какие условия или проверки?
проверяйте по типу записи, я же в коде привел пример проверки
не, я решил сумарную отценку вывести и она не отдалась продукту как и количество голосов
я прост увидел ток комент и пост тип рейтинга ('rating_type' => 'post')
пример
<a class="post-ratings-intro"><span><i class="fa fa-star"></i><?php global $post; $ratingBox = new Rcl_Rating_Box(array( 'rating_type' => 'post', 'object_id' => $post->ID, 'object_author' => $post->post_author)); $ratingBox->setup_box(); echo $average_rating = $ratingBox->vote_count? round( $ratingBox->total_rating / $ratingBox->vote_count, 1 ): 0; ?></span></a>
Спасибо, в итоге получилось такое извращение, не знаю куда проще
<?php global $post; if($post->post_type==='post') { $ratingBoxPost = new Rcl_Rating_Box(array('rating_type' => 'post', 'object_id' => $post->ID, 'object_author' => $post->post_author)); $ratingBoxPost->setup_box(); $average_rating_post = $ratingBoxPost->vote_count? round( $ratingBoxPost->total_rating / $ratingBoxPost->vote_count, 1 ): 0; echo '<a class="post-ratings-intro"><span><i class="fa fa-star"></i>' . $average_rating_post . '</span></a>'; } elseif($post->post_type==='products') { $ratingBoxProduct = new Rcl_Rating_Box(array('rating_type' => 'products', 'object_id' => $post->ID, 'object_author' => $post->post_author)); $ratingBoxProduct->setup_box(); $average_rating_product = $ratingBoxProduct->vote_count? round( $ratingBoxProduct->total_rating / $ratingBoxProduct->vote_count, 1 ): 0; echo '<a class="post-ratings-intro"><span><i class="fa fa-star"></i>' . $average_rating_product . '</span></a>'; } ?>