0

0

WooCommerce:当购物车同时包含特定分类商品时添加费用

碧海醫心

碧海醫心

发布时间:2025-08-06 16:50:01

|

919人浏览过

|

来源于php中文网

原创

woocommerce:当购物车同时包含特定分类商品时添加费用

本文介绍了如何使用 WooCommerce 的 woocommerce_cart_calculate_fees 钩子,实现在购物车同时包含指定分类(例如 "drinks" 和 "bundles")的商品时,自动添加费用的功能。文章提供了详细的代码示例,并解释了如何正确地检查购物车中是否同时存在多个指定分类的商品,从而避免错误地应用费用。

在 WooCommerce 商店中,有时需要根据购物车中商品的特定组合来应用费用或折扣。例如,如果客户同时购买了 "drinks" 和 "bundles" 分类的商品,你可能想提供一个特别折扣。以下是如何通过自定义函数来实现这一目标。

首先,我们需要利用 woocommerce_cart_calculate_fees 动作钩子。这个钩子允许我们在购物车计算费用时插入自定义逻辑。

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

    // 需要同时存在的分类 slug
    $must_categories = array('drinks','bundles');
    $fee_amount = 0;

    $product_cat = array();

    // 遍历购物车中的商品
    foreach( $cart->get_cart() as $cart_item ){
        $terms = get_the_terms( $cart_item['product_id'], 'product_cat' );
        if (is_array($terms)) { // 检查 $terms 是否为数组
            foreach ($terms as $term) {
                $product_cat[] = $term->slug;
            }
        }
    }

    $product_cat = array_unique( $product_cat );

    foreach ( $must_categories as $key => $must_cat ) {

        if( in_array($must_cat, $product_cat) ){
            $fee_amount = -1;
        }else{
            $fee_amount = 0;
            break;
        }

    }

    // 添加费用
    if ( $fee_amount < 0 ){
        // 最后一个参数控制是否启用税费
        WC()->cart->add_fee( __( "Kombucha Bundle Discount", "woocommerce" ), $fee_amount, false );
    }
}

代码解释:

影缘版商城
影缘版商城

率先引入语言包机制,可在1小时内制作出任何语言版本,程序所有应用文字皆引自LANG目录下的语言包文件,独特的套图更换功能,三级物品分类,购物车帖心设计,在国内率先将购物车与商品显示页面完美结合,完善的商品管理,具备上架、下架缺货及特价商品设置功能多多,商城名、消费税、最低购物金额、货币符号、商城货币名称全部后台设定,多级用户考虑,管理员只需要设置用户级别、不同级别用户之返点系统自动判断用户应得返还

下载
  1. add_action( 'woocommerce_cart_calculate_fees','custom_pcat_fee', 20, 1 );: 将 custom_pcat_fee 函数挂载到 woocommerce_cart_calculate_fees 钩子上。20 是优先级,1 是接受的参数数量(购物车对象)。
  2. custom_pcat_fee( $cart ): 自定义函数,接收购物车对象 $cart 作为参数。
  3. if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;: 在后台管理界面或 AJAX 请求中不执行此函数。
  4. $must_categories = array('drinks','bundles');: 定义一个数组,包含需要同时存在的分类 slug。
  5. $product_cat = array();: 初始化一个空数组,用于存储购物车中所有商品的分类 slug。
  6. foreach( $cart->get_cart() as $cart_item ): 遍历购物车中的每个商品。
  7. $terms = get_the_terms( $cart_item['product_id'], 'product_cat' );: 获取当前商品的分类信息。
  8. foreach ($terms as $term): 遍历商品的每个分类术语。
  9. $product_cat[] = $term->slug;: 将分类 slug 添加到 $product_cat 数组中。
  10. $product_cat = array_unique( $product_cat );: 移除 $product_cat 数组中的重复值。
  11. foreach ( $must_categories as $key => $must_cat ): 循环需要同时存在的分类。
  12. if( in_array($must_cat, $product_cat) ): 检查 $must_cat 是否存在于 $product_cat 数组中。
  13. $fee_amount = -1;: 如果所有需要的分类都存在,则设置费用金额为 -1 (折扣)。
  14. else{ $fee_amount = 0; break; }: 只要有一个分类不存在,就将费用金额设置为 0,并跳出循环。
  15. WC()->cart->add_fee( __( "Kombucha Bundle Discount", "woocommerce" ), $fee_amount, false );: 如果 $fee_amount 小于 0,则将费用添加到购物车中。第一个参数是费用名称,第二个参数是费用金额,第三个参数表示是否启用税费。

注意事项:

  • 确保将 'drinks' 和 'bundles' 替换为你实际使用的分类 slug。
  • get_the_terms() 函数返回的是一个对象数组,需要提取 slug 属性才能得到分类 slug。
  • array_unique() 函数用于移除数组中的重复值,确保每个分类只被计算一次。
  • WC()->cart->add_fee() 函数的最后一个参数控制是否对该费用征税。根据你的需求设置 true 或 false。

总结:

这段代码提供了一个灵活的解决方案,可以根据购物车中商品的分类组合来应用费用或折扣。通过修改 $must_categories 数组,你可以轻松地调整需要同时存在的分类。 记住,在将此代码添加到你的主题或插件之前,请务必进行测试。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

155

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

159

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

112

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2024.09.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

754

2023.08.22

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

44

2025.12.04

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

118

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

256

2025.10.24

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号