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

寻求WooCommerce全站商品折扣脚本及代码失效排查

解决WooCommerce简单商品统一10%折扣并显示促销信息的问题

原代码无效的原因

  • 未限定商品类型:原代码会作用于所有商品(包括变量商品),没有针对无变量的简单商品做判断
  • 价格字段修改错误:直接覆盖regular_price和price会让WooCommerce无法识别这是促销活动,自然不会显示原价划掉、折扣价和促销标识
  • 折扣比例不符合需求:代码里是打5折,不是你要的10%折扣

正确的实现代码

下面的代码仅作用于简单商品,设置10%折扣,同时让WooCommerce自动显示原价、折扣价和促销标识:

// 为简单商品设置促销价(10%折扣)
add_filter('woocommerce_product_get_sale_price', 'set_simple_product_sale_price', 90, 2);
add_filter('woocommerce_product_get_price', 'set_simple_product_display_price', 90, 2);

// 确保后台编辑页原价不受影响
add_filter('woocommerce_product_get_regular_price', 'keep_regular_price_intact', 90, 2);

function set_simple_product_sale_price($sale_price, $product) {
    // 仅针对无变量的简单商品生效
    if ($product->is_type('simple')) {
        $regular_price = (float)$product->get_regular_price();
        $sale_price = $regular_price * 0.9; // 10%折扣,即原价的90%
    }
    return $sale_price;
}

function set_simple_product_display_price($price, $product) {
    // 简单商品前端显示促销价作为当前价格
    if ($product->is_type('simple') && $product->get_sale_price()) {
        $price = $product->get_sale_price();
    }
    return $price;
}

function keep_regular_price_intact($regular_price, $product) {
    // 保留原价,让WooCommerce能正确显示原价与折扣价的对比样式
    return $regular_price;
}

// 强制标记符合条件的简单商品为促销状态(确保促销标识显示)
add_filter('woocommerce_product_is_on_sale', 'mark_simple_product_as_on_sale', 90, 2);
function mark_simple_product_as_on_sale($on_sale, $product) {
    if ($product->is_type('simple') && (float)$product->get_sale_price() < (float)$product->get_regular_price()) {
        $on_sale = true;
    }
    return $on_sale;
}

使用说明

  1. 将这段代码添加到你的子主题functions.php文件末尾(不要直接修改主题文件,避免主题更新后代码丢失)
  2. 也可以用专门的代码片段插件(比如Code Snippets)添加,操作更安全
  3. 代码生效后,所有简单商品会自动显示划掉的原价、折扣价,同时页面会出现WooCommerce默认的促销标识(如"SALE"标签)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:05