0

0

WooCommerce:限制每个订单仅购买一个特定产品

心靈之曲

心靈之曲

发布时间:2025-10-19 12:00:38

|

411人浏览过

|

来源于php中文网

原创

woocommerce:限制每个订单仅购买一个特定产品

本教程旨在解决 WooCommerce 中限制用户每个订单只能购买一个特定类型产品(例如订阅产品)的问题。通过自定义代码,我们将实现当购物车中已存在订阅产品时,阻止用户添加其他非订阅产品,反之亦然。我们将详细讲解代码逻辑,并提供完整的实现方案,确保你的 WooCommerce 商店能够按照预期的方式运行。

实现原理

核心思路是利用 woocommerce_add_to_cart_validation 钩子,在产品添加到购物车之前进行验证。我们检查购物车中是否已经存在特定类型的商品(例如订阅商品),如果存在,并且用户尝试添加其他类型的商品,则阻止添加并显示错误信息。

代码实现

以下代码展示了如何实现限制每个订单只能购买一个订阅产品:

add_filter( 'woocommerce_add_to_cart_validation', 'wc_limit_one_subscription_per_order', 10, 2 );

function wc_limit_one_subscription_per_order( $passed_validation, $product_id ) {
    // 定义订阅产品ID数组
    $subscription_products = array( 245632, 245626, 245623, 245620, 245617, 245614, 245610, 245606, 245601 );

    // 遍历购物车中的商品
    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];

        // 购物车中是否存在订阅产品?
        if ( in_array( $_product->get_id(), $subscription_products ) ) {
            // 是的,购物车中存在订阅产品

            // 用户尝试添加的商品是否也是订阅产品?
            if ( in_array( $product_id, $subscription_products ) ) {
                // 是的,允许添加 (可以同时购买多个订阅产品,如果需要限制,可以修改此处的逻辑)
                continue;
            } else {
                // 不是,用户尝试添加非订阅产品,阻止添加
                wc_add_notice( __( '购物车中已存在订阅产品,不能再添加其他类型的商品。', 'woocommerce' ), 'error' );
                return false; // 阻止添加到购物车
            }
        } else {
            // 否,购物车中不存在订阅产品

            // 用户尝试添加的商品是否是订阅产品?
            if ( in_array( $product_id, $subscription_products ) ) {
                // 是的,用户尝试添加订阅产品

                // 购物车中已经存在非订阅产品,阻止添加
                wc_add_notice( __( '购物车中已存在非订阅产品,不能再添加订阅产品。', 'woocommerce' ), 'error' );
                return false; // 阻止添加到购物车
            }
        }
    }

    return $passed_validation; // 允许添加到购物车
}

代码解释:

  1. add_filter( 'woocommerce_add_to_cart_validation', 'wc_limit_one_subscription_per_order', 10, 2 );: 将自定义函数 wc_limit_one_subscription_per_order 绑定到 woocommerce_add_to_cart_validation 钩子,该钩子在产品添加到购物车之前触发。

  2. $subscription_products = array( ... );: 定义一个数组,包含所有订阅产品的 ID。你需要根据你的实际情况修改这个数组。

  3. foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) { ... }: 循环遍历购物车中的所有商品。

  4. $_product = $values['data'];: 获取购物车中每个商品的对象。

  5. in_array( $_product->get_id(), $subscription_products ): 检查当前商品是否是订阅产品。

  6. wc_add_notice( __( '...', 'woocommerce' ), 'error' );: 添加 WooCommerce 错误提示信息。

  7. return false;: 阻止产品添加到购物车。

  8. return $passed_validation;: 允许产品添加到购物车。

如何使用

  1. 将以上代码复制到你的 WordPress 主题的 functions.php 文件中,或者创建一个自定义插件。
  2. 修改 $subscription_products 数组,替换为你实际的订阅产品 ID。
  3. 保存文件。

注意事项

  • 缓存问题: 修改 functions.php 文件后,可能需要清除 WordPress 缓存才能使更改生效。
  • 插件冲突: 确保你的代码与其他 WooCommerce 插件没有冲突。如果出现问题,尝试禁用其他插件,然后逐个启用,以找出冲突的插件。
  • 错误信息: wc_add_notice() 函数用于显示错误信息。你可以根据你的需要修改错误信息的内容。
  • 订阅产品ID: 务必正确配置 $subscription_products 数组,确保包含所有订阅产品的 ID。
  • 逻辑调整: 如果需要更复杂的逻辑,例如允许同时购买多个订阅产品,或者根据不同的订阅产品进行不同的限制,你需要修改代码中的判断逻辑。

总结

通过使用 woocommerce_add_to_cart_validation 钩子,我们可以轻松地限制用户每个订单只能购买一个特定类型的商品。 本教程提供了一个基本的实现方案,你可以根据你的实际需求进行修改和扩展。 记住,在修改 functions.php 文件之前,最好备份你的网站,以防止出现意外情况。 通过细致的测试和调试,你可以确保你的 WooCommerce 商店按照预期的方式运行,提供更好的用户体验。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中foreach用法
php中foreach用法

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

74

2025.12.04

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

208

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

296

2023.10.25

wordpress seo
wordpress seo

WordPress网站SEO优化方法有:1、选择一个SEO友好的主题,具有清晰的代码结构,快速的加载速度和响应式设计;2、使用SEO插件,优化你的标题标签,元描述,关键字,XML站点地图等;3、优化你的内容,内容是SEO优化的核心;4、优化你的网站速度;5、创建友好的URL;6、使用内部链接;7、优化图像;8、使用社交媒体;9、定期更新你的网站;10、监控和分析你的网站等等。

419

2023.09.18

wordpress下载后怎么安装
wordpress下载后怎么安装

安装前准备:确保服务器满足要求、获取安装文件、创建数据库。上传 wordpress 文件。创建数据库和用户。运行安装程序:选择语言、输入数据库信息、网站标题和管理员信息。安装 wordpress。安装后配置:设置永久链接、安装主题、安装插件、创建内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

316

2024.04.15

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

16

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

131

2026.01.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

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

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