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

添加特定商品后WooCommerce整单免运费失效问题及代码排查

解决WooCommerce特定商品加入购物车后整单免运费失效问题

原代码存在的问题

你提供的代码未生效,主要有3个核心原因:

  1. 依赖全局$woocommerce对象,新版本WooCommerce官方更推荐使用WC()->cart标准方式获取购物车实例,避免全局变量带来的兼容性问题。
  2. 仅检查product_id,如果触发免运费的是变体商品,购物车项中存储的product_id是父商品ID,会导致漏判变体商品的情况。
  3. 过滤器优先级设为20,可能被其他更高优先级的逻辑覆盖;同时未处理后台设置的免费配送最低消费限制(如果有配置的话)。

修正后的代码

将以下代码添加到主题的functions.php文件或自定义插件中即可:

function enable_free_shipping_for_eligible_product( $is_available, $package ) {
    // 替换为你的免运费触发商品ID
    $eligible_product_ids = array( 560 );
    
    // 确保购物车实例存在
    if ( ! WC()->cart ) {
        return $is_available;
    }
    
    // 遍历购物车所有商品,检查是否有符合条件的商品
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product_id = $cart_item['product_id'];
        $variation_id = $cart_item['variation_id'];
        
        // 同时检查父商品ID和变体ID,覆盖普通商品和变体商品场景
        if ( in_array( $product_id, $eligible_product_ids ) || in_array( $variation_id, $eligible_product_ids ) ) {
            // 强制启用免费配送,忽略后台设置的最低消费限制
            return true;
        }
    }
    
    // 无符合条件商品,保留原有运费设置
    return $is_available;
}
add_filter( 'woocommerce_shipping_free_shipping_is_available', 'enable_free_shipping_for_eligible_product', 99, 2 );

关键注意事项

  • 必须启用免费配送方式:在WooCommerce后台「设置 → 配送 → 配送区域」中,确保已添加并启用「免费配送」这个配送方法,否则代码无法触发对应逻辑。
  • 清除缓存:修改代码后,清空浏览器缓存、WooCommerce缓存(如果安装了缓存插件),避免旧的运费计算逻辑被缓存导致不生效。
  • 确认商品ID正确:商品ID可在商品编辑页面的URL中查看(例如wp-admin/post.php?post=560&action=edit中的560就是商品ID)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:27:25