Home › Forums › Basel support forum › Product reviews for category pages › Reply To: Product reviews for category pages
November 4, 2023 at 11:02 pm
#509938
Tuomo
Participant
I found the star rating for categories from here and it works only with functions.php: https://stackoverflow.com/questions/70977508/woocommerce-category-rating-based-on-reviews .
Do you know how I could get the star rating on the bottom of the category page, because now it is on the top part?
I was wondering as well that do you have similar type of code for HTML blocks so the texts could be translated with WPML?
Here is the modified functions.php code from that page:
defined('ABSPATH') or die("Te pup!");
function super_plugin_install() {
// Do some installation work
}
register_activation_hook(__FILE__, 'super_plugin_install');
// HOOKS
add_action('init', 'super_plugin_init');
/********************************************************/
/* FUNCTIONS
/********************************************************/
function super_plugin_init() {
add_action('woocommerce_after_shop_loop', 'show_rating_stars');
function show_rating_stars() {
if (is_paged()) return;
global $post, $wpdb, $wp_query;
if (comments_open()) :
// Get the query object
$cat_obj = $wp_query->get_queried_object();
if ($cat_obj) {
$category_name = $cat_obj->name;
$category_desc = $cat_obj->description;
$category_ID = $cat_obj->term_id;
}
$post_ids = get_posts(array(
'numberposts' => -1, // Get all posts.
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $category_ID,
),
),
'fields' => 'ids', // Only get post IDs
));
$sumrating = 0;
$sumcount = 0;
foreach ($post_ids as $pId) {
$count = $wpdb->get_var("
SELECT COUNT(meta_value) FROM $wpdb->commentmeta
LEFT JOIN $wpdb->comments ON $wpdb->commentmeta.comment_id = $wpdb->comments.comment_ID
WHERE meta_key = 'rating'
AND comment_post_ID = $pId
AND comment_approved = '1'
AND meta_value > 0
");
$sumcount = $sumcount + $count;
$rating = $wpdb->get_var("
SELECT SUM(meta_value) FROM $wpdb->commentmeta
LEFT JOIN $wpdb->comments ON $wpdb->commentmeta.comment_id = $wpdb->comments.comment_ID
WHERE meta_key = 'rating'
AND comment_post_ID = $pId
AND comment_approved = '1'
");
$sumrating = $sumrating + $rating;
}
if ($sumcount > 0) :
$average = number_format($sumrating / $sumcount, 2);
$adminratingtext = esc_attr(get_option('wcr_ratings_text'));
if ($adminratingtext == '') {
$ratingstext = '';
} else {
$ratingstext = '<span class="ratings-text">' . $adminratingtext . ' ' . $category_name . ':</span> ';
}
echo '<br /><br />';
echo '<div itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">' . $ratingstext . wc_get_rating_html($average, $sumcount) . ' ' . $average . '/5</div>';
echo 'Perustuu ' . $sumcount . ' tuotearvioon';
endif;
endif;
}
}
function wcr_init() {
register_setting('wcr_options', 'wcr_ratings_text');
}
add_action('admin_init', 'wcr_init');
function wcr_options_page() {
?>
<div class "wrap">
<?php screen_icon(); ?>
<h2>Woocommerce Category Rating Options</h2>
<form action="options.php" method="post" id="wcr_options_form">
<?php settings_fields('wcr_options'); ?>
<h3><label for="rating-text">Custom rating text:</label>
<input type="text" id="wcr_ratings_text" name="wcr_ratings_text" placeholder="Rating for: %category%" value="<?php echo esc_attr(get_option('wcr_ratings_text')); ?>" /></h3>
<p><input class="button-primary" type="submit" name="submit" value="Save options" /></p>
</form>
</div>
<?php
}
function wcr_plugin_menu() {
add_options_page('Woocommerce Category Rating Settings', 'Category Ratings', 'manage_options', 'woocommerce-category-rating-plugin', 'wcr_options_page');
}
add_action('admin_menu', 'wcr_plugin_menu');
function my_plugin_action_links($links) {
$links[] = '<a href="' . get_admin_url(null, 'options-general.php?page=woocommerce-category-rating-plugin') . '">Settings</a>';
return $links;
}
add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'my_plugin_action_links');