kbs*_*s14 7 wordpress rating e-commerce woocommerce
我有一个woocommerce商店,当你看到他们的缩略图时,我想为每个产品添加星级.我已经在大产品视图中拥有明星,但我希望它们显示在每个缩略图下方,就像大多数电子商务商店一样,例如timberland.com.我知道我可以使用css从视图中禁用项目但不添加它们.有什么想法吗?
小智 17
你可以把它放到你的主题functions.php文件中:
add_action('woocommerce_after_shop_loop_item', 'my_print_stars' );
function my_print_stars(){
global $wpdb;
global $post;
$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 = $post->ID
AND comment_approved = '1'
AND meta_value > 0
");
$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 = $post->ID
AND comment_approved = '1'
");
if ( $count > 0 ) {
$average = number_format($rating / $count, 2);
echo '<div class="starwrapper" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">';
echo '<span class="star-rating" title="'.sprintf(__('Rated %s out of 5', 'woocommerce'), $average).'"><span style="width:'.($average*16).'px"><span itemprop="ratingValue" class="rating">'.$average.'</span> </span></span>';
echo '</div>';
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,woocommerce_after_shop_loop_item根据您的设计以及您希望明星出现在哪里,您可能需要更改为不同的挂钩.
此页面列出了WooCommerce操作挂钩:http://wcdocs.woothemes.com/codex/extending/hooks/.我没有看到任何与缩略图相关的钩子,但你可以尝试woocommerce_after_shop_loop_item_title或woocommerce_after_shop_loop_item.
(此功能基本上是从WooCommerce的single-product-reviews.php复制的)
Mar*_*lin 14
实际上有一种更简洁的方法来处理这个问题.只需使用Woocommerce构建的内置函数:
add_action('woocommerce_after_shop_loop_item', 'get_star_rating' );
function get_star_rating()
{
global $woocommerce, $product;
$average = $product->get_average_rating();
echo '<div class="star-rating"><span style="width:'.( ( $average / 5 ) * 100 ) . '%"><strong itemprop="ratingValue" class="rating">'.$average.'</strong> '.__( 'out of 5', 'woocommerce' ).'</span></div>';
}
Run Code Online (Sandbox Code Playgroud)
我已经确认这对我有用.