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

WooCommerce结账时剔除无配送方式商品不计入总价

WooCommerce 混合可/不可配送商品时自动剔除不可配送商品结算金额方案

不需要安装额外插件,直接把代码加到当前主题/子主题的functions.php文件末尾即可实现需求,代码逻辑做了兼容,不会破坏WooCommerce原生的单买不可配送商品时禁用支付的功能。

实现代码

// 非可配送区域结算时,自动将指定不可配送类商品从结算金额中剔除
add_action( 'woocommerce_before_calculate_totals', 'exclude_unshippable_items_from_total', 9999 );
function exclude_unshippable_items_from_total( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    // 替换成你站点支持配送该特殊商品的本地国家/地区二位代码,国内站点填CN,美国站点填US即可
    $shippable_country = 'CN';
    if ( WC()->customer->get_shipping_country() === $shippable_country ) return;

    // 替换成你为不可海外配送商品创建的专属shipping class ID,和你原有代码里填的ID保持一致即可
    $unshippable_class_id = 15;

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        if ( $product->get_shipping_class_id() == $unshippable_class_id ) {
            // 将不可配送商品的结算价设为0,自动不计入购物车总价、小计
            $cart_item['data']->set_price( 0 );
            // 可选:给用户展示提示,可自行修改文案,不需要提示直接删除下面这行即可
            wc_add_notice( sprintf( '商品「%s」不支持配送到您的当前地址,已自动从结算金额中移除', $product->get_name() ), 'notice' );
        }
    }
}

// 兼容原有配送方式逻辑,避免可配送商品的运费计算异常
add_filter( 'woocommerce_package_rates', 'adjust_rates_for_mixed_cart', 9999, 2 );
function adjust_rates_for_mixed_cart( $rates, $package ) {
    $unshippable_class_id = 15; // 和上面的ID保持一致
    $all_items_unshippable = true;

    foreach ( $package['contents'] as $item ) {
        if ( $item['data']->get_shipping_class_id() != $unshippable_class_id ) {
            $all_items_unshippable = false;
            break;
        }
    }

    // 仅当购物车全是不可配送商品时,才清空配送方式、触发原生禁用支付逻辑
    if ( $all_items_unshippable ) {
        $rates = array();
    }
    return $rates;
}

参数修改说明

  • 把$shippable_country后面的国家代码改成你站点所属的、支持配送该特殊商品的地区代码即可,国内站点填CN,美国站点填US
  • 把两处$unshippable_class_id后面的数字15,替换成你自己创建的不可配送商品对应的shipping class ID,ID可以在配送类编辑页面的URL参数里找到,和你之前查找ID的方式完全一致
  • 用户提示文案可自行修改,不需要提示直接删除对应wc_add_notice代码行即可,不影响核心功能

实现效果

  • 海外用户购物车同时包含可配送商品、不可配送特殊商品时,特殊商品金额自动从结算总价中扣除,最终仅计算可配送商品的货款+对应运费,和你预期的59美元结算效果完全一致
  • 购物车仅包含该不可配送商品时,完全保留WooCommerce原生逻辑:不生成配送选项、禁用支付按钮,无法完成结算
  • 本地可配送区域用户购买该商品时,所有结算、配送逻辑完全正常,不受代码影响
  • 代码无额外依赖,体量极轻,不会增加站点额外负载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:06:27