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

如何为WooCommerce指定产品类目添加7.40元收据通知费并排除部分类目

WooCommerce 实现全类目加收收据通知费(排除指定类目)

原代码存在的问题

  • 逻辑倒置:原代码是仅指定类目加收费用,但需求是全类目加收,排除指定类目
  • 产品类目获取错误:$item['product_cat']不是WooCommerce购物车项的标准属性,无法正确获取产品所属类目ID
  • 重复计费:遍历购物车时,每个符合条件的商品都会添加一次费用,导致金额重复累加
  • 费用金额与名称不符合需求:原金额是5元,名称为“Additional Charge”,需改为7.4元的“收据通知费”

修正后的代码

add_action('woocommerce_cart_calculate_fees', 'add_receipt_notification_fee_exclude_categories');

function add_receipt_notification_fee_exclude_categories() {
    // 后台非AJAX请求时不执行
    if (is_admin() && !defined('DOING_AJAX')) return;

    // 定义需要排除的类目ID数组
    $excluded_cat_ids = array(600, 650, 700);
    $should_add_fee = false;

    // 遍历购物车中的每个商品
    foreach (WC()->cart->get_cart() as $item) {
        $product = $item['data'];
        // 获取产品所属的所有商品类目ID
        $product_cat_ids = wp_list_pluck(get_the_terms($product->get_id(), 'product_cat'), 'term_id');
        
        // 检查当前商品是否不在排除类目里
        if (!array_intersect($product_cat_ids, $excluded_cat_ids)) {
            $should_add_fee = true;
            break; // 只要有一个商品符合,就标记需要加费,无需继续遍历
        }
    }

    // 如果需要加费,添加7.4元的收据通知费
    if ($should_add_fee) {
        WC()->cart->add_fee(__('收据通知费'), 7.40);
    }
}

代码关键说明

  • 排除类目设置:修改$excluded_cat_ids数组中的ID即可调整需要排除的类目
  • 避免重复计费:通过$should_add_fee标记,只要购物车中有一个商品不属于排除类目,就只添加一次费用
  • 正确获取类目ID:使用get_the_terms获取产品的商品类目,再通过wp_list_pluck提取ID数组,确保类目判断准确
  • 费用配置:add_fee函数中第一个参数是费用名称(支持多语言),第二个参数是费用金额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:07:02