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

WooCommerce基于购物车小计与配送国家自定义费用问题排查

修复你的WooCommerce出口费用代码

我帮你排查出了代码里的几个关键问题,修正后就能实现你要的功能了:

问题分析

  • 目标国家数组未启用:你把$targeted_country的数组定义给注释掉了,导致变量未定义,代码直接报错无法运行。
  • 错误的数组判断方式:用==来判断用户的运输国家是否在数组里是行不通的,PHP里检查值是否在数组中需要用in_array()函数。
  • 缺少运输国家校验:如果用户还没选择运输地址,WC()->customer->get_shipping_country()会返回空值,可能引发逻辑错误,最好先做非空判断。

修正后的代码

add_action( 'woocommerce_cart_calculate_fees','add_fee_weight_based', 10 , 1 );
function add_fee_weight_based( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    $fee = 45;
    // 启用目标国家数组
    $targeted_countries = array('AF','AL','DZ','AS','AD','AO','AI','AQ','AG','AR','AM','AW','AU','AZ','BS','BH','BD','BB','BY','BZ','BJ','BM','BT','BO','BQ','BA','BW','BV','BR','IO','BN','BF','BI','KH','CM','CA','CV','KY','CF','TD','CL','CN','CX','CC','CO','KM','CG','CD','CK','CR','CI','CU','CW','DJ','DM','DO','EC','EG','SV','GQ','ER','ET','FK','FO','FJ','GF','PF','TF','GA','GM','GE','GH','GI','GL','GD','GP','GU','GT','GG','GN','GY','HT','HM','VA','HN','HK','IS','IN','ID','IR','IQ','IM','IL','JM','JP','JE','JO','KZ','KE','KI','KP','KR','KW','KG','LA','LB','LS','LR','LY','LI','MO','MK','MG','MW','MY','MV','ML','MH','MQ','MR','MU','YT','MX','FM','MD','MC','MN','ME','MS','MA','MZ','MM','NA','NR','NP','NC','NZ','NI','NE','NG','NU','NF','MP','NO','OM','PK','PW','PS','PA','PG','PY','PE','PH','PN','PR','QA','RE','RU','RW','BL','SH','KN','LC','MF','PM','VC','WS','SM','ST','SA','SN','RS','SC','SL','SG','SX','SB','SO','ZA','GS','SS','LK','SD','SR','SJ','SZ','CH','SY','TW','TJ','TZ','TH','TL','TG','TK','TO','TT','TN','TR','TM','TC','TV','UG','UA','AE','GB','US','UM','UY','UZ','VU','VE','VN','VG','VI','WF','EH','YE','ZM','ZW');
    
    $cart_value = $cart->get_cart_contents_total(); // 获取购物车商品总价(不含税和运费)
    $shipping_country = WC()->customer->get_shipping_country();

    // 先检查运输国家是否存在,再判断金额和国家条件
    if ( ! empty( $shipping_country ) && $cart_value > 1000 && in_array( $shipping_country, $targeted_countries ) ) {
        $cart->add_fee( __( 'Export Document' ), $fee, true );
    }
}

额外说明

  • 如果你需要的是包含税费和运费的订单总额,可以把$cart->get_cart_contents_total()换成$cart->get_total()。
  • add_fee()的第三个参数true表示该费用会被计入税费计算,如果不需要的话可以改成false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:12:33