禁用 Woocommerce 中特定类别的购物车项目的其他产品类别

2023-11-29

我正在开发一个网上商店,有不同的方面,第一个是常规商店,第二个是夜间啤酒服务。我已经搜索过,但找不到我要找的东西;

首先,夜间啤酒服务是一个特定类别,不应与常规商品一起订购(如果类别'beerservice'在购物车中,禁用所有其他类别添加到购物车)。

此选项也需要反之亦然(其他情况),因此,如果将常规商品添加到购物车,则类别'beerservice'应禁用添加到购物车。

我正在使用我找到的答案代码:
当特定产品类别的商品位于 Woocommerce 的购物车中时禁用购物

这部分完成了工作,但不可能添加同一类别的多个产品,反之亦然。我已经在这段代码中替换了

我还想添加一条特定于时间的消息,例如“超过时间订购的订单将不会交付”(没有研究这一点),但如果不是太麻烦的话。


此代码将检查父产品类别,因此对于定义的产品类别,它将:

  • 当定义的类别在购物车中时,避免将其他产品类别添加到购物车。
  • 当定义类别中的产品添加到购物车时,它将从其他产品类别中删除购物车项目。

改进后的代码:

// Custom conditional function that checks for parent product categories
function has_parent_term( $product_id ) {
    // HERE set your targeted product category SLUG
    $category_slug = 'beerservice'; //  <====  <====  <====  <====  <====  <====  <====

    // Convert category term slug to term id
    $category_id   = get_term_by('slug', $category_slug, 'product_cat')->term_id;
    $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
        } else {
            $parent_term_ids[] = $term->term_id;
        }
    }
    return in_array( $category_id, $parent_term_ids );
}

// Avoid add to cart others product categories when "beerservice" is in cart
add_filter( 'woocommerce_add_to_cart_validation', 'specific_category_avoid_add_to_cart_others', 20, 3 );
function specific_category_avoid_add_to_cart_others( $passed, $product_id, $quantity) {
    if( WC()->cart->is_empty() || has_parent_term( $product_id ) ) {
        return $passed;
    }

    foreach( WC()->cart->get_cart() as $cart_item ){
        if( has_parent_term( $cart_item['product_id'] ) ) {
            wc_add_notice( __('Alert message 1 (avoid add to cart)', 'woocommerce' ), 'error' ); // Display a custom error notice
            return false; // Avoid add to cart
        }
    }
    return $passed;
}

// Remove other items when our specific product is added to cart
add_action( 'woocommerce_add_to_cart', 'conditionally_remove_other_products', 20, 4 );
function conditionally_remove_other_products ( $cart_item_key, $product_id, $quantity, $variation_id ){
    if( has_parent_term( $product_id ) ) {
        foreach( WC()->cart->get_cart() as $item_key => $cart_item ){
            if( ! has_parent_term( $cart_item['product_id'] ) ) {
                WC()->cart->remove_cart_item( $item_key );
                wc_add_notice( __('Alert message 2 (Item removed from cart)', 'woocommerce' ), 'error' ); // Display a custom error notice
            }
        }
    }
}

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


有关的:当特定产品类别的商品位于 Woocommerce 的购物车中时禁用购物

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

禁用 Woocommerce 中特定类别的购物车项目的其他产品类别 的相关文章

  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • 在值中包含换行符

    我有一个 Word 模板 其中 php 代码中定义了值 在PHP代码中 document gt setValue Value1 value1 在word模板中 Value1 如何将包含两个值之间的断线的值包含在单词的值中 Replace n
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • PHP 开发相当于 Mongrel/Webrick 吗?

    PHP 开发中是否有与 Rails 开发期间使用 Mongrel Webrick 等效的方法 我通常在端口 3000 上使用 Mongrel 在开发过程中为我的 Rails 应用程序提供服务 我从事 PHP 开发已经有几年了 据我所知 方法
  • 如何将 HTML 转换为 Markdown?

    我有一个类似 stackoverflow 的网站 有一个文本区域 人们可以在其中写答案 我用这个 PHP 库 http parsedown org 转换降价 我的意思是我使用该函数来转换 italic to i italic i inclu
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 如何通过php的require()或include()函数传递变量?

    当我使用这个时 require diggstyle code php page page no 警告是 无法打开流 第 198 行 C xampp htdocs 4ajax gallery core php 中没有错误 错误是 Failed
  • 如何使用 Twig 的属性函数访问嵌套对象属性

    我试图使用一个树枝变量来访问另一个树枝变量的属性 直到我找到 属性 函数为止 该变量才起作用 除了需要访问嵌套属性的情况外 效果很好 当包含属性的变量实际上是对象 属性时 它不起作用 例如 attribute object1 variabl
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • phpunit测试调用其他需要mock的类方法的方法

    我正在尝试创建一个非常标准的单元测试 在其中调用一个方法并断言它的响应 但是我正在测试的方法调用同一类中的另一个方法 该方法做了一些繁重的工作 我想模拟该方法 但仍按原样执行我正在测试的方法 仅使用从调用另一种方法返回的模拟值 我简化了示例
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • 保存多对多关系,同步/附加不存在?

    我有以下两个多对多关系的模型 use Illuminate Database Eloquent Model class Permission extends Model The database table used by the mode
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • Python multiprocessing.pool 与类目标函数和神经进化的交互

    警告 这将是很长一段时间 因为我想尽可能具体 确切的问题 这是一个多重处理问题 我确保我的类都按照之前实验中构建 预期的方式运行 编辑 事先说过线程 当我在线程环境中运行问题的玩具示例时 一切正常 然而 当我转向真正的问题时 代码就崩溃了
  • Intent BOOT_COMPLETED 在华为设备上不起作用

    我想在我的 Android 应用程序中收听 APN 更改 因此我启动了一项服务android intent action BOOT COMPLETED 该服务启动一个 ContentObserver 来监听更改content telepho
  • 如何在构建定义的“流程”部分中刷新构建流程模板的更新参数?

    For a build process template 我们可以添加 删除 编辑它的参数列表 并将其用作构建 工作流程步骤中的变量 我读了很好的指南here 我正在克隆模板默认模板 11 1 xaml to sayHello Defaul
  • pyqt中QMenu的圆角

    我正在尝试覆盖paintEvent of QMenu使其具有圆角 上下文菜单应该看起来像这样 这是我尝试过的代码 但什么也没出现 from PyQt5 import QtWidgets QtGui QtCore import sys cla
  • 是否可以使用 javascript 获取从浏览器访问的上一页的 URL

    我在A页 现在我点击页面A并重定向到页面B 现在我点击页面B并重定向到页面A 这里我想知道页面B的url 我努力了document referrer但它不起作用 当用户单击链接导航到当前页面时 document referrer 会起作用
  • Elasticsearch - 使用 java api 删除嵌套对象不起作用

    我有一个 elasticsearch 文档 其中包含嵌套对象 我希望能够通过 java update api 删除它们 这是包含脚本的代码 UpdateRequest updateRequest new UpdateRequest INDE
  • 使用 Canvas+HTML5 将 rgb-jpg 客户端转换为 8-bit-jpg

    很多文章展示了在客户端使用canvas html5将jpeg文件转换为灰度的方法 但我需要的是在上传到我的服务器之前将图像转换为 8 位灰度以减小其大小 可以用canvas html5来实现吗 The 什么工作组规范提到了一个 toBlob
  • Symfony2.如何让表单忽略额外的字段? [复制]

    这个问题在这里已经有答案了 我需要将一些数据发布到我的 Symfony 表单中 我使用submit 方法用于此 但是当请求包含一些额外的数据时 我收到错误 此表单不应包含额外字段 使用表单配置是否可以让表单丢失额外的数据 也许存在另一种方法
  • 如何使用WIX在D盘创建INSTALLLOCATION文件夹?

    下面的 xml 在 C Programfiles 下创建指定的文件夹 但我想在 D MySetupFolder 中创建 SomeFolder MyApp 文件夹 如何使用 WIX 创建此文件夹
  • 使用用于 seo 目的的路由隐藏或删除 url 中的控制器名称 = codeigniter

    我正在使用一个控制器 如何使用路由删除或隐藏 URL 上的控制器名称 我已经设置了 htaccess 以删除我的 index php 我已经尝试了其他类似问题的很多代码 但我没有运气 我不知道我的实时服务器是否有问题 因为在我之前的项目中我
  • 在特定节点后插入 XElement

  • GAE 无法查找 mongodb atlas 实例的 SRV 记录

    我有一个在 Atlas 上运行的 mongodb 实例和一个在 GAE 上运行的 Spring Boot 应用程序 试图访问该数据库 我在本地运行它没有问题 但在 GAE 上运行时我在日志中看到此错误 com mongodb MongoCo
  • 使用 Zebra 打印机 [ZPL] 打印阿拉伯文本

    正如标题所说 是否有任何选项可以打印阿拉伯语内容 ZPL Printer 尝试的事情是添加字体并启动打印 XA FX FR CF0 40 CI28 FO130 45 FH FD Font file FS XZ 我的打印机安装了 TT0003
  • 在 mat-select 中设置默认选项

    我的 Angular 材质项目中有一个简单的选择选项表单字段 组件 html
  • 抽象类中的构造函数有什么用? [复制]

    这个问题在这里已经有答案了 既然我们无法实例化抽象类 那么抽象类中有构造函数的必要性是什么呢 抽象类被设计为可扩展的 每个构造函数都来自子类必须从基类调用构造函数 因此您的抽象类中需要构造函数 抽象类是一个骨架 因此直接实例化它是没有意义的
  • 将元素固定到顶部

    我有一个固定在顶部 x y 轴的元素 有什么方法可以将其更改为仅固定到 x 轴吗 例如 这样我就可以将固定元素向左和向右滚动 当前代码 div style width 100 The fixed header element div div
  • git-log 缺少撤消更改的合并提交

    考虑这个测试脚本 bin sh x initialize repository rm rf missing merge log mkdir missing merge log cd missing merge log git init cr
  • NSPredicate:如何将字符串视为数字?

    我正在 iOS 应用程序中使用 sqlite 上的核心数据构建一个复合 NSPredicate 来发出获取请求 一切都已经工作正常 但我无法包含最后一个条件 原因很简单 我需要检查存储为字符串的值是否在特定的浮点范围内 问题在于条件是按字母
  • 设置 SQL SERVER Express 2017 以允许远程连接

    刚刚从重大崩溃中恢复我的服务器 这导致 Windows Server 2016 被重新安装 我有一个连接到 sql server 数据库的桌面应用程序 问题是现在我在服务器上设置了数据库 我不记得如何将其提供给外部源 应用程序 你能帮我吗
  • 禁用 Woocommerce 中特定类别的购物车项目的其他产品类别

    我正在开发一个网上商店 有不同的方面 第一个是常规商店 第二个是夜间啤酒服务 我已经搜索过 但找不到我要找的东西 首先 夜间啤酒服务是一个特定类别 不应与常规商品一起订购 如果类别 beerservice 在购物车中 禁用所有其他类别添加到