基于评论的wooccommerce类别评级



现在我使用这个代码,它计算一个类别中的所有产品评级,并将其显示为5/5(200条评论(。这200条评论来自该类别中的所有10种产品,并显示在类别页面中。它运行得很好,但我试图插入代码,只在我放入的特定类别中显示它,而不是其他类别

<?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' );

?>

您可以使用条件标记来实现这一点。

if (is_product_category( array( 'shirts', 'games' ) ){ your code };

来源:https://woocommerce.com/document/conditional-tags/#section-5

最新更新