避免在 WooCommerce 购物车中组合虚拟和物理产品

2024-03-07

我已经寻找这个问题很长时间了,但似乎从未找到可能的解决方案。

有谁看到任何解决方案如何在一个 Woocommerce 购物车中仅允许物理或虚拟产品?当客户尝试添加虚拟和物理的组合并禁止该组合时,或者确保该组合不能出现在一个购物车中时,可能会弹出通知。

按顺序进行组合会不断导致错误。

请帮忙。


以下将避免将购物车中的物理产品和虚拟产品组合在一起:

// Check cart items and avoid add to cart
add_filter( 'woocommerce_add_to_cart_validation', 'filter_wc_add_to_cart_validation', 10, 3 );
function filter_wc_add_to_cart_validation( $passed, $product_id, $quantity ) {
    $is_virtual = $is_physical = false;
    $product = wc_get_product( $product_id );

    if( $product->is_virtual() ) {
        $is_virtual = true;
    } else {
        $is_physical = true;
    }

    // Loop though cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        // Check for specific product categories
        if ( ( $cart_item['data']->is_virtual() && $is_physical )
        || ( ! $cart_item['data']->is_virtual() && $is_virtual ) ) {
            wc_add_notice( __( "You can't combine physical and virtual products together.", "woocommerce" ), 'error' );
            return false;
        }
    }

    return $passed;
}


// For security: check cart items and avoid checkout
add_action( 'woocommerce_check_cart_items', 'filter_wc_check_cart_items' );
function filter_wc_check_cart_items() {
    $cart = WC()->cart;
    $cart_items = $cart->get_cart();
    $has_virtual = $has_physical = false;

    // Loop though cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        // Check for specific product categories
        if ( $cart_item['data']->is_virtual() ) {
            $has_virtual = true;
        } else {
            $has_physical = true;
        }
    }

    if ( $has_virtual && $has_physical ) {
        // Display an error notice (and avoid checkout)
        wc_add_notice( __( "You can't combine physical and virtual products together.", "woocommerce" ), 'error' );
    }
}

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

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

避免在 WooCommerce 购物车中组合虚拟和物理产品 的相关文章

随机推荐

  • GWT 列表框多选

    我需要添加一个列表框 组合框 允许用户选择多个值 我知道 GWT API 中已经有一个可用的ListBox http google web toolkit googlecode com svn javadoc 1 5 com google
  • 使用 Doctrine 和 Symfony2 查询多对多关系

    我试图理解 Doctrine 和 Symfony2 中的多对多关系是如何运作的 我重新创建了官方文档 goo gl GYcVE0 中显示的示例 并且我有两个实体类 User and Group正如你在下面看到的
  • 错误 0x80005000 和 DirectoryServices

    我正在尝试使用 Net 中的目录服务运行简单的 LDAP 查询 DirectoryEntry directoryEntry new DirectoryEntry LDAP someserver contoso com DC contoso
  • 为什么 Xcode 7 显示 *.tbd 而不是 *.dylib?

    Xcode 7 在目标 gt 构建阶段 gt 链接二进制文件与库 gt 点击 按钮 选择要添加的框架时 您找不到 dylib 而是看到 tbd 这是什么原因呢 需要dylib的人 从这里开始post https stackoverflow
  • Python 将 3d 数组重塑为 2d

    我想将 numpy 数组重塑为所描绘的形状 从 3D 变为 2D 不幸的是 顺序不正确 假设有一个 numpy 数组 1024 64 100 并希望将其转换为 1024 100 64 有人知道如何维持秩序吗 我有一个样本数据 data 0
  • Maven - 对等点未经过身份验证

    几天前 我的专家停止工作了 更具体地说 它会停止下载依赖项 下面我记录了我为找到解决方案而执行的一系列信息和步骤 我仔细检查了 settings xml 这个文件也被我的同事使用 他们没有任何问题 我安装了 Maven 3 0 4 3 0
  • 存储批处理作业的密码

    我有一个小的java prog 它使用需要授权的网络服务 因此java prog 将使用Windows任务调度程序运行 需要有一个用户 密码参数 如何将它们存储在某个地方而不将它们作为纯文本放在文件中 到目前为止 我已经尝试使用runtim
  • 无法在将新附加的字符串列保存到 numpy 数组时执行 np.savetxt

    我有 numpy 数组mfcc具有 mfcc 值 且形状为 5911 20 我有一份清单a 其中有 5911 个标签 例如apple cow dog 我想将这些标签附加到mfccnumpy 数组 STEP1我将带有标签的列表转换为数组 at
  • 自定义 Django 字段来存储电子邮件地址列表

    我正在尝试向 Django 模型添加一个字段来表示电子邮件地址列表 我希望用户在管理中的表单中输入逗号分隔的地址列表 然后我的应用程序将解析该列表以发送一系列电子邮件 我当前的实现涵盖了基本思想 但有很大的局限性 在管理中 如果我输入类似的
  • 增加 JMeter 执行期间的线程数

    我有一个性能测试JMeter并想用它来测试最大系统性能 吞吐量 因此 当错误率低于 2 时 应增加活动线程数 我发现Constant Throughput Timer 把它放入Thread Group但它只会暂停或减慢线程 我尝试将其定义如
  • 从 Postman 向 Microsoft Bot 发送消息

    我正在尝试向我创建并发布到 azure 服务的机器人发送消息 以便该机器人可以开始向其某些用户发送消息 我尝试首先在 Postman 上发出请求 然后我可以为该交互构建一个控制器 我正在执行以下请求 POST https login mic
  • 单击手风琴中元素 id 的链接时打开 JQuery 手风琴

    这是我的问题http jsfiddle net uJ3W5 12 http jsfiddle net uJ3W5 12 正如您所看到的 顶部的 4 个按钮链接到手风琴第 1 部分中的元素 然而 当手风琴关闭时 这些链接不起作用 我需要它 这
  • 如何比较yaml文件中的键?

    有两个 Ruby on Rails 国际化 yaml 文件 一份文件完整 另一份文件缺少密钥 如何比较两个 yaml 文件并查看第二个文件中缺少的键 有没有工具可以做到这一点 假设file1是正确的版本并且file2是缺少密钥的版本 def
  • 将 VS2019 与 TFS2018 vnext 构建系统结合使用,无需服务器端解决方法

    我最近在尝试将 VS2019 与 TFS2018 vnext 构建系统一起使用时遇到了问题 在 Visual Studio Build 步骤中不能选择VS2019 选择 Latest 则不会使用Visual Studio 2019 在测试服
  • 是否可以对 feed 进行过滤

    是否可以对流中的提要实施过滤 我希望允许用户关注其他用户帖子 但将这些帖子标记为各种类别 我们的愿望是选择一个 足球 类别 并仅查看我关注的人发布的具有该标签的帖子 或者如果该类别是 所有体育 则可能是一个标签集合 查看 api 和文档 提
  • Spring集成:如何顺序处理文件

    我使用 int file inbound channel adapter 来加载目录中存在的文件 我喜欢按顺序处理文件 这意味着当第一个文件的处理完成时 我加载第二个文件 等等 I see a sample https github com
  • Firefox 中的无效日期 - Javascript

    我想将以下字符串 10 10 2013 03 04 放入 Date 对象中 它在 Chrome 中工作 但 Firefox 告诉我这是一个无效的日期 我猜他们的意思是格式 我尝试对其使用 Date parse 但这使其成为 NaN 该怎么办
  • 如何向表达式添加另一个条件?

    我有这样的表情 Expression
  • Mongoose - 如何分组和填充?

    我使用 MongoDB 和 Mongoose 作为我的 ODM 我尝试使用以下命令进行查询populate and group by在同一份声明中 这是我的简单文档模型 var userSchema new Schema username
  • 避免在 WooCommerce 购物车中组合虚拟和物理产品

    我已经寻找这个问题很长时间了 但似乎从未找到可能的解决方案 有谁看到任何解决方案如何在一个 Woocommerce 购物车中仅允许物理或虚拟产品 当客户尝试添加虚拟和物理的组合并禁止该组合时 或者确保该组合不能出现在一个购物车中时 可能会弹