搜索全站
建站 9 分钟阅读

WooCommerce 运费与税费怎么设?地区、重量、免邮门槛一次讲清

运费和税费是 WooCommerce 丢单最多的环节。本文讲清配送区域、按重量阶梯、免邮门槛与税率配置,给出用 package_rates 动态改运费的代码。

U
UFO_PF 2017-04-02 · 阅读 9 分钟
Wo 建站
阅读提示
本文约 3,370 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:客户下不了单,因为”无可用配送方式”

WooCommerce 上线后最常见的客诉是三种:客户在结账页看到”很抱歉,您所在的地区暂无可用配送方式”;客户买了两件东西却付了两次运费;客户应付 100 元,结账时变成 113 元,不知道多的 13 元是什么。这三种分别对应配送区域没覆盖、运费按件累加没有合并逻辑、税费未说明。

运费和税费是电商里最琐碎也最容易劝退客户的部分。客户对”商品价格”有心理预期,但运费是结账时才出现的额外支出,任何不透明都会造成弃单。所以配置的原则是:规则要简单可预测,金额要在商品页就可见。

原理分析:WooCommerce 运费与税费的计算层次

层次 配置项 作用范围 优先级
配送区域 地理范围(国家/省/邮编) 决定可用方式 从上到下首个匹配
配送方式 统一运费/免邮/自提 区域内 客户可选
附加规则 免邮门槛、优惠券 方式内 满足条件即生效
税费 税率、是否含税 商品与运费 结账计算

关键机制有三点:一是配送区域按列表顺序匹配,命中第一个就不再往下找,所以要按”特殊在前、通用在后”排序;二是统一运费(Flat Rate)支持用 [qty]、[cost]、[fee percent="10" min_fee="5"] 这类占位符做简单计算;三是税费要不要对运费计税是独立的选项,很多地区要求运费也要计税。

保姆级实操

步骤 1:按”特殊在前”排列配送区域

去”WooCommerce → 设置 → 配送 → 配送区域”。假设你在成都,本地可自提、川渝包邮、其余地区按重量收费,区域顺序必须是:

区域 1:成都(本地自提,免运费)
区域 2:四川、重庆(统一运费 8 元,满 99 免邮)
区域 3:中国其他地区(按重量阶梯)
区域 4:Locations not covered by your other zones(兜底,必须有)

最后一个兜底区域千万别漏,否则海外客户或未列明地区会直接无法下单。

步骤 2:统一运费的费用表达式

在统一运费的”费用”字段里可以用占位符实现阶梯:

# 基础 8 元 + 每件商品 2 元
8 + ( 2 * [qty] )

# 按订单小计的 5% 收运费,最低 6 元
[fee percent="5" min_fee="6"]

# 前 1kg 收 12 元,之后每 kg 加 5 元(需配合重量字段与插件)
12 + ( 5 * ( [weight] - 1 ) )

[weight] 需要商品填写了重量才有效。更复杂的阶梯(如按地区首重续重)建议用 Weight Based Shipping 这类专用插件,硬套表达式维护成本高。

步骤 3:免邮门槛要配合文案

免邮方式(Free Shipping)的”最低订单金额”设为 99,同时勾上”需要同时满足:使用了免邮优惠券”。更重要的是在商品页和购物车页明示还差多少免邮——WooCommerce 本身不显示这个提示,需要自己加:

add_action( 'woocommerce_before_cart', function () {
    $threshold = 99;
    $subtotal  = WC()->cart->get_subtotal();
    if ( $subtotal >= $threshold ) {
        return;
    }
    $gap = $threshold - $subtotal;
    printf(
        '<p class="free-ship-tip">再买 ¥%s 即可享受包邮</p>',
        wc_price( $gap )
    );
} );

步骤 4:用 woocommerce_package_rates 动态改运费

这是最实用的运费过滤器,可以按条件调整、隐藏或增加配送方式。比如会员免邮、特定商品只支持自提:

add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
    // 场景:购物车里有指定分类商品时,隐藏"统一运费",只留自提
    $has_bulky = false;
    foreach ( $package['contents'] as $item ) {
        if ( has_term( 'bulky', 'product_cat', $item['product_id'] ) ) {
            $has_bulky = true;
            break;
        }
    }
    if ( $has_bulky ) {
        foreach ( $rates as $key => $rate ) {
            if ( 'flat_rate' === $rate->method_id ) {
                unset( $rates[ $key ] );
            }
        }
    }
    return $rates;
}, 10, 2 );

改完运费规则后要去”WooCommerce → 状态 → 工具”清空 WooCommerce 缓存,否则前台可能仍是旧结果。

步骤 5:税费配置

在”WooCommerce → 设置 → 常规”里勾选”启用税费”,然后到”税费”标签页设置:商品价格是否含税(国内建议”含税”)、税率表按地区导入、是否对运费计税。WooCommerce 支持用 CSV 批量导入税率,列包含国家代码、地区代码、邮编、税率、名称、优先级:

country,state,postcode,city,rate,name,priority,compound,shipping,order
CN,SC,,13.0,增值税,1,0,1,1
CN,,,,13.0,增值税,2,0,1,2

shipping 列为 1 表示运费也计税。优先级小的先生效,注意别重复匹配导致税费叠加。

步骤 6:让税费可解释

在商品页价格旁加”含税”或”不含税”的说明,在结账页的税费行加一句解释。很多弃单只是因为客户不知道那 13 元是什么。

步骤 7:上线前用真实地址测四种场景

本地自提、省内未满门槛、省外超重、海外兜底。每种都要走到支付前一步确认金额正确。

常见踩坑

  1. 区域顺序错误:通用的”中国”区域排在”成都”前面,成都客户只能看到通用运费。
  2. 少了兜底区域:未列明地区报”无可用配送方式”,直接丢单。
  3. 免邮方式没设最低金额:全场免邮,亏损还不知道原因。
  4. 商品没填重量却用了 [weight]:计算结果恒为空或 0,运费变免费。
  5. 改了规则没清 WooCommerce 缓存:运费结果被 transient 缓存,前台看起来”没生效”。
  6. 税率重复匹配:多行税率同时命中同一地区,税费叠加,客户看到异常金额直接弃单。
  7. 案例:某零食店的”运费劝退”:全国统一运费按件累加,客户买 4 件被收 4 份运费共 32 元,而商品总价只有 45 元,弃单率高达 64%。改成”基础 8 元 + 每件 2 元”并设满 99 免邮后,客单价从 45 元升到 118 元,弃单率降到 21%。

总结

运费与税费配置是否合格,看三个标准:任意收货地址都能得到可用配送方式、商品页就能大致预估最终支付金额、改规则后前台立刻生效。行动清单:先按”特殊在前、通用在后、兜底最后”重排配送区域,再用费用表达式配置按件或按重的计算,然后设置免邮门槛并在购物车页显示差额提示,最后导入税率表并验证 shipping 列与优先级。这三块理顺,结账页的弃单会明显下降。商店整体搭建见 WooCommerce 从零搭建电商站,商品结构见 WooCommerce 商品类型与变体。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。