'woocommerce category rating based on reviews
Right now i use this code, it calculates all products ratings in one category and shows it as 5/5 (200 reviews). The 200 reviews are gathered from all 10 products in this category and shown in category page. It works perfect however im trying to insert code to just show it on specific categorys that i put in and not the rest. I have 3 categorys i want it on and the rest i dont want it on.
<?php
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 $woocommerce, $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 '<div itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">'.$ratingstext.'<span itemprop="ratingValue">'.$average.'</span>/<span itemprop="bestRating">5</span> (<span itemprop="ratingCount">'.$sumcount.'</span> recenzii)</div>';
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' );
?>
Solution 1:[1]
You can achieve this using conditional tags.
if (is_product_category( array( 'shirts', 'games' ) ){ your code };
Source:https://woocommerce.com/document/conditional-tags/#section-5
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Project CHM |