You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce产品滑块中分别显示左右位置的折扣与促销徽章?

解决方案

问题分析

你之前使用的woocommerce_sale_flash钩子是直接替换默认促销徽章,所以会覆盖原有徽章;另外首页产品滑块可能未调用该钩子,导致不生效。要实现同时显示左右两个徽章,需要新增独立的折扣百分比徽章,再通过CSS定位位置。

代码实现

1. 添加折扣百分比徽章的钩子

使用woocommerce_before_shop_loop_item_title钩子新增折扣徽章,该钩子在产品图片与标题之间触发,对商店页面和产品滑块均生效:

add_action('woocommerce_before_shop_loop_item_title', 'add_discount_percentage_badge', 5);
function add_discount_percentage_badge() {
    global $product;
    
    // 仅在产品促销时显示徽章
    if (!$product->is_on_sale()) return;
    
    // 计算折扣百分比
    $regular_price = (float)$product->get_regular_price();
    $sale_price = (float)$product->get_sale_price();
    
    if ($regular_price > 0) {
        $percentage = round((($regular_price - $sale_price) / $regular_price) * 100);
        echo '<span class="discount-percentage-badge">' . $percentage . '%</span>';
    }
}

2. CSS定位徽章位置

通过CSS分别设置默认促销徽章和折扣百分比徽章的左右位置(注意:.product-slider需替换为你主题中产品滑块的实际容器类名):

/* 确保徽章基于产品图片容器定位 */
.woocommerce ul.products li.product .woocommerce-loop-product__link,
.product-slider .product-item .product-image-container {
    position: relative;
}

/* 默认促销徽章固定在左侧 */
.woocommerce ul.products li.product .onsale,
.product-slider .product-item .onsale {
    left: 10px;
    right: auto;
    top: 10px;
}

/* 折扣百分比徽章固定在右侧 */
.discount-percentage-badge {
    position: absolute;
    right: 10px;
    top: 10px;
    background: #e74c3c;
    color: #fff;
    padding: 4px 8px;
    border-radius: 4px;
    font-size: 12px;
    font-weight: bold;
}

额外说明

  • 钩子优先级设为5,确保与默认促销徽章(通常优先级10)不冲突;
  • 代码中增加了促销判断,仅促销产品会显示折扣徽章;
  • 之前使用的woocommerce_sale_flash替换代码可以删除,默认促销徽章会保留显示。

内容的提问来源于stack exchange,提问作者Diksha Saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:05:26