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

如何基于用户角色调整WooCommerce不含税运费规则?

WooCommerce 按用户角色调整运费(基于不含税小计)

问题根源

你遇到的异常是因为之前的代码错误使用了订单总金额(包含税费、运费等额外费用)作为判断依据,而非要求的不含税订单小计,导致批发用户不含税小计未达70欧元,但加上税费后总金额超70时错误触发免运费。

修正后的代码

以下代码严格基于不含税购物车小计判断,同时区分批发/普通用户角色:

add_filter('woocommerce_package_rates', 'custom_shipping_rates_based_on_user_role', 10, 2);
function custom_shipping_rates_based_on_user_role($rates, $package) {
    // 排除后台订单编辑场景,避免干扰
    if (is_admin() && !defined('DOING_AJAX')) {
        return $rates;
    }

    // 获取当前用户角色
    $current_user = wp_get_current_user();
    $is_wholesale_user = in_array('wholesale_customer', $current_user->roles);

    // 获取不含税购物车小计(核心:仅计算商品不含税总价)
    $subtotal_ex_tax = WC()->cart->get_subtotal_ex_tax();

    // 定义运费规则参数
    $wholesale_free_min = 70;
    $wholesale_shipping_fee = 10;
    $regular_free_min = 30;
    $regular_shipping_fee = 5;

    // 遍历调整所有包裹类运费费率
    foreach ($rates as $rate_id => $rate) {
        // 仅针对Flat Rate(包裹费率),可根据实际启用的运费方式调整
        if ($rate->method_id === 'flat_rate') {
            if ($is_wholesale_user) {
                // 批发用户规则
                if ($subtotal_ex_tax >= $wholesale_free_min) {
                    $rates[$rate_id]->cost = 0;
                    $rates[$rate_id]->taxes = array(); // 清除运费税费
                } else {
                    $rates[$rate_id]->cost = $wholesale_shipping_fee;
                }
            } else {
                // 普通用户规则
                if ($subtotal_ex_tax >= $regular_free_min) {
                    $rates[$rate_id]->cost = 0;
                    $rates[$rate_id]->taxes = array();
                } else {
                    $rates[$rate_id]->cost = $regular_shipping_fee;
                }
            }
        }
    }

    return $rates;
}

关键修正说明

  1. 判断依据精准:使用WC()->cart->get_subtotal_ex_tax()获取的是购物车中所有商品的不含税总价,完全不受税费、运费等其他金额影响,严格符合需求。
  2. 角色判断准确:通过wp_get_current_user()获取当前用户角色,精准识别批发用户。
  3. 运费费率处理:仅针对包裹费率(Flat Rate)调整,同时清除运费税费,确保免运费逻辑彻底生效。
  4. 后台兼容:排除后台订单编辑页面的计算,避免后台操作时出现错误运费。

使用方法

  • 将代码添加到当前WordPress主题的functions.php文件末尾,或使用自定义代码插件(如Code Snippets)导入执行。
  • 确保WooCommerce后台已启用「Flat Rate(包裹费率)」运费方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:05:20