讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

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

梦伟姑娘_7319

梦伟姑娘_7319

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

|

431人浏览过

|

来源于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 ) { ... }: 循环遍历购物车中的所有商品。

    SEO Keyword Density
    SEO Keyword Density

    SEO关键词密度优化与页面审计技能。使用场景:①提供页面路径与关键词进行SEO优化;②提升页面关键词密度;③提升搜索引擎排名;④进行SEO审计(meta标签、OG、hreflang等)。触发词:关键词密度、SEO优化、关键词优化等。

    下载
  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工具

更多
讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

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

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

838

2025.12.04

scripterror怎么解决
scripterror怎么解决

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

1069

2023.10.18

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

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

3500

2023.10.25

wordpress seo
wordpress seo

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

6835

2023.09.18

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

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

6899

2024.04.15

WordPress插件教程
WordPress插件教程

本专题整理热门WordPress插件资源,涵盖SEO优化、缓存加速、安全防护、表单管理、电商扩展等插件推荐与使用教程。

338

2026.06.16

WordPress建站教程大全
WordPress建站教程大全

本专题汇总WordPress教程相关内容,包括WordPress安装教程、建站教程、使用技巧、网站管理经验和实战案例,帮助用户快速掌握WordPress建站与运营方法。

900

2026.06.16

WordPress开发教程
WordPress开发教程

本专题提供WordPress开发技术资料,包括主题开发、插件开发、自定义功能开发、API调用及性能优化等内容。

1058

2026.06.16

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn