在 Woocommerce 中一次只允许购物车中的一种产品类别

2024-04-05

我如何将 Woocommerce 购物车配置为一次只允许其中一种产品类别类型?


以下代码将允许仅将一种产品类别中的商品添加到购物车,从而避免添加到购物车并显示自定义通知:

add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_category_allowed', 20, 3 );
function only_one_product_category_allowed( $passed, $product_id, $quantity) {

    // Getting the product categories term slugs in an array for the current product
    $term_slugs   = wp_get_post_terms( $product_id, 'product_cat', array('fields' => 'slugs') );

    // Loop through cart items
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){

        // Check if the product category of the current product don't match with a cart item
        if( ! has_term( $term_slugs, 'product_cat', $cart_item['product_id'] ) ){

            // Displaying a custom notice
            wc_add_notice( __('Only items from one product category are allowed in cart'), 'error' );

            // Avoid add to cart
            return false; // exit
        }
    }
    return $passed;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。


添加(更新)- 相同但仅适用于父产品类别:

add_filter( 'woocommerce_add_to_cart_validation', 'only_one_product_category_allowed', 20, 3 );
function only_one_product_category_allowed( $passed, $product_id, $quantity) {
    $parent_term_ids = $item_parent_term_ids = array(); // Initializing

    // Loop through the current product category terms to get only parent main category term
    foreach( get_the_terms( $product_id, 'product_cat' ) as $term ){
        if( $term->parent > 0 ){
            $parent_term_ids[] = $term->parent; // Set the parent product category
        }
    }

    // Loop through cart items
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ){
        // Loop through the cart item product category terms to get only parent main category term
        foreach( get_the_terms( $cart_item['product_id'], 'product_cat' ) as $term ){
            if( $term->parent > 0 ){
                $item_parent_term_ids[] = $term->parent; // Set the parent product category
            }
        }

        // Check if parent product categories don't match
        if( ! array_intersect( $parent_term_ids, $item_parent_term_ids ) ){

            // Displaying a custom notice
            wc_add_notice( __('Only items from one product category are allowed in cart'), 'error' );

            // Avoid add to cart
            return false; // exit
        }
    }
    return $passed;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Woocommerce 中一次只允许购物车中的一种产品类别 的相关文章

  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g
  • 如何防止 CakePHP 中重复表单提交?

    我发现 CakePHP 中的安全组件通过将令牌作为隐藏值添加到表单中来帮助防止 CSRF 我想知道是否有办法防止使用此组件或其他组件 帮助器重复表单提交 在之前的项目中 我使用了保存在会话中的唯一哈希值 该哈希值会在提交时读取并删除 重复提
  • 在 Kohana 中,可以触发 404 错误吗?

    我有一个名为articles 它创建从数据库获取相关数据的文章模型 我想 如果我调用的方法返回false 触发 404 错误 这是我到目前为止所拥有的 articleName this gt uri gt segment articles
  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • PHP上传文件产生错误代码4。为什么?

    HTML
  • 如何验证使用 php 上传的文件不包含可执行二进制文件?

    使用简单的 Firefox 插件 黑客可以更改他们想要上传的任何文件的 MIME 类型 绕过文件类型检查器 然后 黑客可以使用 GIMP 等程序将 php 脚本嵌入到图像 音频或任何其他文件的二进制数据中 我该如何检查并防止这种情况发生 您
  • 基本表创建 fpdf

    我找不到使用 fpdf 制作表格并从 mysql 数据库获取数据的合适教程 我只是想知道如何创建一个 我在网上尝试示例时遇到了很多错误 例如 我有 名字 中间名 姓氏 年龄 和 电子邮件 列 如何使用 fpdf 创建表格并回显数据库中的条目
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • PHP 如果不存在,则从字符串中删除 ','

    我正在运行这段代码 stmt pdo conn gt prepare SELECT from admin where support emails support emails and logged logged and disabled
  • Facebook Graph API v3.1 开发人员访问令牌权限限制

    如您所知 Facebook 将其 API 升级到了 V3 1 现在正在慢慢地淘汰旧的 API 和应用程序 因此我们必须迁移到新的 API 他们做出了一些艰难的决定 这对垃圾邮件网站来说是好事 但对开发人员来说也很难 提醒 Graph API
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • 加载时覆盖 WordPress 插件翻译文件

    我正在使用带有插件的法语版 WordPress活动日历 http wordpress org plugins the events calendar 该插件附带了捆绑的法语翻译 但有一些错误 我想修复它们 但替换原始文件是一个坏主意 因为它
  • 如何在 PHP 数组中的另一个已知(通过键或指针)元素之后有效地插入元素?

    给定一个数组 a array abc 123 k1 gt v1 k2 gt v2 78 tt k3 gt v3 当其内部指针指向其元素之一时 如何在当前元素之后插入元素 如何在键已知元素 例如 k1 之后插入元素 表现护理 您可以通过使用拆
  • 使用php将文本文件转换为xml?

    data txt ha15rs 250 home2 gif 2 ha36gs 150 home3 gif 1 ha27se 300 home4 gif 4 ha4678 200 home5 gif 5 我想使用 php 使用 simplex
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • PHP 时间间隔

    我正在寻找一个看起来应该非常简单的解决方案 但似乎我不能在这里找到任何好的答案 而且我自己似乎无法让它发挥作用 我正在寻找的是设置开始时间 结束时间 然后迭代给定时间间隔之间的一组时间 例如 上午 9 00 下午 5 00 是开始时间 这些
  • 与 array_intersect 相反?

    是否有一个内置函数可以获取数组 1 中不存在于数组 2 中的所有成员 我知道如何以编程方式执行此操作 只是想知道是否有一个内置函数可以执行相同的操作 所以请不要提供代码示例 这听起来像是一份工作array diff http www php
  • 图像创建从jpeg() PHP

    我正在使用 imagecreatefromjpeg 函数合并两张图片 现在我面临的问题是 当我使用服务器中的图片时 它工作正常 而当我使用其他网站的图片时 它不起作用 例如 当我使用这个 PHP 文件时http coolfbapps in
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015

随机推荐

  • 在 Rails 应用程序中输出 JSON

    好的 Rails 3 新开发人员在这里 我希望我的 jquery 能够从项目的 Rails 3 应用程序获取 json 对象 这是我的控制器 def yourprojects projects Projects all current us
  • 使用 QNetworkAccessManager 支持 https。运行时遇到 SslErrors

    我正在使用 QNetworkAccessManager 执行 https get 操作 我在运行时遇到 SSLErrors 经过一段时间的研究 我能够在安装 OpenSSL 后运行我的程序 我需要两个 dll libeay32 dll 和
  • 将 URI 路径传递给 JAX-RS 提供者

    我最近实现了 Jersey JAX RS Rest 服务 我创建了一个 JIBX 提供程序 它允许在 XML 和 Java 类型之间进行解组和编组 我还想通过在 URL 路径中指定版本来对我的服务进行版本控制 版本控制将包括用于编组和解组
  • 将 iPhone 时间与服务器同步的最佳方法

    我有一个客户端服务器模型 其中服务器将发送一些带有日期参数的数据 iPhone 需要渲染它 服务器和 iPhone 将驻留在不同的时区 所以我需要同步两者的时间 假设用户在 07 18 2011 04 45 EDT 服务器时间 完成了一些活
  • XCloseDisplay 返回什么?

    我从各种文档中可以看到XCloseDisplay返回一个整数 我怀疑这是一个错误代码 我应该用这个值做什么 是错误代码吗 如果是这样我该如何处理该错误 我查看了源代码 lib X11 ClDisplay c It says return 0
  • iOS 8 Xcode 6.1 EXC_BREAKPOINT (SIGTRAP) 仅适用于捆绑应用程序

    我的应用程序工作正常 直到我升级到 OSX 10 10 Yosemite 和 Xcode 6 1 现在 每当我捆绑应用程序进行分发时 我都会在应用程序的特定位置收到一个 sigtrap 在模拟器中或者如果我将应用程序直接加载到手机上 则不会
  • 是否有将类转换为字符串的标准方法

    在Java中 标准是定义方法toString 返回类的字符串表示形式 除了超载之外operator lt lt C 中有这样的标准吗 我知道有std to string 方法来获取数字的字符串表示形式 C 标准是否谈到定义方法to stri
  • 将 OutputStream 转换为 ByteArrayOutputStream

    我正在尝试转换OutputStream to a ByteArrayOutput溪流 我无法找到任何关于如何做到这一点的明确简单的答案 这个问题是在 StackOverflow 上的问题标题中提出的 但问题的正文询问如何更改ByteArra
  • IE 中字段集的背景颜色超出边界

    在 IE 中 字段集的背景颜色超出边界 我有一个表格 背景颜色设置为蓝色 字段集的背景颜色设置为白色 我该如何在 IE 中解决这个问题 My CSS fieldset margin 10px fieldset legend font siz
  • Google 网络字体和 Windows XP

    我的网站正在使用 google 字体 但我在 XP 上遇到了一些问题 也就是说 因为 XP 默认情况下没有抗锯齿功能 所以所有字体都是像素化的 即使在 Firefox 和 Chrome 等浏览器中也是如此 有没有办法解决这个问题 或者 XP
  • Windows 版 Safari 和 Mac 版 Safari 之间的差异

    从开发人员的角度来看 Mac 版 Safari 和 Windows 版 Safari 有哪些区别 我认为这可以归结为评估之间的差异 如果我错过了什么 请纠正 布局渲染 JavaScript 行为 最终要做出的决定是 开发人员能否仅在 Saf
  • jQuery 请求未定义的 url(与 phpdevshell 一起使用)

    我正在使用 phpdevshell 使用最新的 jQuery 创建一个应用程序 现在 在我看来没有任何原因的情况下 jQuery 开始请求一个以 undefined 结尾的 url 但该 url 不存在并导致 404 它寻找这个网址 htt
  • 迭代 JObject 键

    我有以下内容JObject作为回报https gate io api2 trade https gate io api2 tradeAPI 我如何迭代每个作为单独硬币的密钥也获得它的值 我尝试使用 Newtonsoft 解析它JObject
  • gulp 任务来处理可写的文件

    我在VS2015项目中使用Gulp来运行jscs http jscs info 在 JavaScript 文件上使用fix选项集 目的是修改读取的同一文件 即源和目标相同 var gulp require gulp var jscs req
  • 无法在 Intellij IDEA 中设置 Java 断点

    我试图将断点放入 GoogleAppEngine 源代码 SDK 1 7 0 但 IDEA Ultimate 11 0 2 一直告诉我Warning No executable code found at line 482 in class
  • Oreo (8.1) 中的设备蓝牙地址

    我需要获取设备的蓝牙MAC地址 在 Android 6 之前 这很简单BluetoothAdapter getDefaultAdapter getAddress 之后我们不得不使用一个简单的解决方法 String macAddress an
  • C++ - 对于内部编译器错误可以做什么?

    在编写矩阵类时 我遇到了一些有趣且烦人的事情 内部编译器错误 我愿意在名为的类中调用一个姐妹构造函数Matrix4
  • 从文本文件中删除回车符

    我有一个文本文件是 已定界 长度超过 59 000 行 如何删除回车以便每一行都是一条记录 Here is what the current file looks like Here is what I need it to look li
  • 未满足的对等依赖关系 Angular 2.3.0 rxjs zone.js

    我一直有未满足的同伴依赖性rxjs and zone js 即使当我移除我的node modules文件夹 清理 npm 缓存并重新安装 我的node版本是6 7 0 npm版本是3 10 8 这是我的 package json name
  • 在 Woocommerce 中一次只允许购物车中的一种产品类别

    我如何将 Woocommerce 购物车配置为一次只允许其中一种产品类别类型 以下代码将允许仅将一种产品类别中的商品添加到购物车 从而避免添加到购物车并显示自定义通知 add filter woocommerce add to cart v