如何在WooCommerce商品缩略图中排除特定分类商品的徽章显示?
解决WooCommerce中隐藏“deal”分类商品折扣徽章的问题
可以实现隐藏“deal”分类商品的折扣徽章,推荐通过修改PHP代码的方式(彻底不生成徽章HTML),也可以用CSS样式隐藏作为备选方案。
方法一:修改PHP函数(推荐)
在你现有的PHP函数中,添加判断商品是否属于“deal”分类的逻辑,若属于则跳过折扣徽章的生成。修改后的完整代码如下:
function action_woocommerce_before_shop_loop_item_title() { remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 ); global $product; if ( is_a( $product, 'WC_Product' ) ) { $size = 'woocommerce_thumbnail'; $image_size = apply_filters( 'single_product_archive_thumbnail_size', $size ); $get_image = $product->get_image( $image_size ); $is_on_sale = $product->is_on_sale(); // 判断商品是否属于deal分类 $is_deal_cat = has_term( 'deal', 'product_cat', $product->get_id() ); if ( $is_on_sale && !$is_deal_cat ) { // 仅当商品促销且不属于deal分类时才生成徽章 $rrp_price = (int) $product->get_regular_price(); $sale_price = (int) $product->get_price(); if ( $rrp_price > $sale_price ) { $discount_amount = $rrp_price - $sale_price; $discount_percent = round( ( $discount_amount / $rrp_price ) * 100, 0 ) . '% Off'; $get_image = '<span class="wpd-sale-thumbnail"> <span class="wpd-sale-badge">' . $discount_percent . '</span>' . $get_image . '</span>'; } } } echo $product ? $get_image : ''; } add_action( 'woocommerce_before_shop_loop_item_title', 'action_woocommerce_before_shop_loop_item_title', 9 );
关键修改点:
- 添加
$is_deal_cat = has_term( 'deal', 'product_cat', $product->get_id() );:检查当前商品是否属于slug为deal的商品分类 - 将原有的
if ( $is_on_sale )改为if ( $is_on_sale && !$is_deal_cat ):只有当商品处于促销状态且不属于deal分类时,才生成折扣徽章
方法二:CSS样式隐藏(备选)
如果你不想修改PHP代码,可以通过CSS选择器定位到deal分类下的商品,隐藏其折扣徽章。在你的现有CSS中添加以下代码:
/* 隐藏deal分类商品的折扣徽章 */ .product-category-deal .wpd-sale-badge { display: none !important; }
原理:WooCommerce会给商品列表项添加包含分类slug的类名(格式为product-category-{分类slug}),通过这个类名可以精准定位到deal分类的商品,进而隐藏其徽章。
内容的提问来源于stack exchange,提问作者marwah
相关产品推荐
相关产品推荐

