防止 WooCommerce 优惠券堆叠在购物车和结帐页面上

2023-12-06

我需要防止两个特定的优惠券一起使用。我成功地实现了这段代码,它可以防止将这些优惠券堆叠在cart page:

add_action( 'woocommerce_before_cart', 'check_coupon_stack' );
function check_coupon_stack() {
    $coupon_code_1 = 'mycode1';
    $coupon_code_2 = 'mycode2';
    if ( WC()->cart->has_discount( $coupon_code1 ) && WC()->cart->has_discount( $coupon_code2) ) {
        WC()->cart->remove_coupon( $coupon_code2 );
        $notice_text = 'Discount code '.$coupon_code1.' cannot be combined with code '.$coupon_code2.'. Code '.$coupon_code2.' removed.';
        wc_print_notice( $notice_text, 'error' );
        wc_clear_notices();
    }
}

然而,这并不能阻止堆叠checkout页面,紧随其后的是cart page.

我尝试简单地添加:

add_action( 'woocommerce_before_checkout_form', 'check_coupon_stack' );

但这并不能让这项工作在checkout页。还需要什么?


WooCommerce 包含多个适用于优惠券的挂钩,woocommerce_applied_coupon就是其中之一,非常适合你的问题。

此外,您当前的代码仅在一个方向上工作,即当$coupon_code_1用来,$coupon_code_2已移除。但是,当您在问题中表明您希望阻止两个特定优惠券一起使用时,这不适用于相反的方向。

我的回答考虑到了这一点,所以你得到:

function action_woocommerce_applied_coupon( $coupon_code ) {
    // Settings
    $coupon_code_1 = 'coupon1';
    $coupon_code_2 = 'coupon2';

    // Initialize
    $combined = array( $coupon_code_1, $coupon_code_2 );

    // Checks if coupon code exists in an array
    if ( in_array( $coupon_code, $combined ) ) {
        // Get applied coupons
        $applied_coupons = WC()->cart->get_applied_coupons();

        // Computes the difference of arrays
        $difference = array_diff( $combined, $applied_coupons );

        // When empty
        if ( empty( $difference ) ) {
            // Shorthand if/else - Get correct coupon to remove
            $remove_coupon = $coupon_code == $coupon_code_1 ? $remove_coupon = $coupon_code_2 : $remove_coupon = $coupon_code_1;

            // Remove coupon
            WC()->cart->remove_coupon( $remove_coupon );

            // Clear Notices
            wc_clear_notices();

            // Error message
            $error = sprintf( __( 'Discount code "%1$s" cannot be combined with code "%2$s". Code "%2$s" removed.', 'woocommerce' ), $coupon_code, $remove_coupon );

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

防止 WooCommerce 优惠券堆叠在购物车和结帐页面上 的相关文章

  • WordPress 管理栏未显示在网站前端

    请问有人可以帮我解决这个问题吗 WordPress 管理栏未显示在我网站的前端 公共可见页面 上 它显示我何时在后端登录 即仪表板 用户设置正常 设置为在查看站点时显示管理栏 我尝试停用 然后重新激活 已安装的插件 但仍然没有显示 只是背景
  • docker-compose mysql 容器拒绝访问 wordpress 容器

    我遇到 mysql 5 7 容器拒绝访问 wordpress 容器的问题 我正在使用 docker compose 并且在 Mac OSX 上运行 docker Docker 应该是可用的最新版本 这是我的 docker compose y
  • 订单编辑页面中的 WooCommerce 自定义字段

    Display custom field Orders edit page add action woocommerce before order itemmeta storage location of order items 10 3
  • 在 WordPress 中使用自定义字段进行搜索

    我正忙于使用 WordPress 开发 Web 应用程序 我创建了一个带有一些自定义字段的自定义帖子 当我使用 WordPress 搜索框搜索帖子时 仅返回标题与搜索字符串匹配的帖子 我想在搜索域中添加自定义字段 我可以在 WordPres
  • Paypal 付款标准默认输入卡详细信息

    我确信这个主题已经在这里了 但我刚刚与 Paypal 通电话 试图查明他们的帐户上是否有一个设置 可以让客户看到 输入卡详细信息区域 而不是自动 默认设置 引导您登录 注册您的 PayPal 帐户 Paypal 表示没有一个设置可以在他们这
  • Woocommerce 中的欧洲 GDPR 附加结帐验证复选框

    您好 我一直在尝试向我的 Woocommerce 结帐页面添加一个额外的条件复选框 该复选框与条款和条件相同 但包含有关新 GDPR 数据保护 的信息以及指向我的隐私政策的链接 他们必须在方框中打勾才能结帐 我一直在使用从此处找到的各种代码
  • Woocommerce 获取产品

    我使用以下代码从我的 WordPress 网站中的 WooCommerce 获取产品类别列表
  • 多文件上传字段的重力形式预览缩略图

    我们使用重力形式将多个图像附加到图库自定义字段并创建新帖子 我们不知道如何在 HTML5 导入字段下显示图像缩略图 而不仅仅是在提交表单之前显示文件名 之前的答案仅涵盖单个文件上传 图片上传重力形式预览 https stackoverflo
  • 任何插件安装失败 - 无法复制文件错误

    每次我安装一个新的 WordPress 插件时 它都会说无法复制文件和文件地址 有谁知道为什么会这样 我遇到了同样的问题 但就我而言 我是使用 FTP 进行更新 我通过将主机名设置为 localhost 而不是使用 IP 来修复此问题 这是
  • Wordpress - 排除某个类别出现在菜单或侧边栏小部件中

    是否有一个简单的解决方案 例如插件 来排除菜单或侧边栏中出现的类别 我创建了一个名为 视频 的帖子类别 它显示 YouTube 视频 自然 但后来我意识到它们显示在我的 最近帖子 侧边栏中 我正在寻找一种简单的方法来排除它们 任何想法将不胜
  • 使用 AJAX 获取发布数据

    我正在尝试从 Wordpress 帖子 AJAX 中提取内容 我已经在下面列出了迄今为止我的努力 加载的脚本 wp enqueue script my ajax request get stylesheet directory uri js
  • 如何使用额外标记输出 wp_list_categories

    我目前正在使用下面的脚本在无序列表中输出我的所有 WordPress 类别 如何获得带有额外标记的输出 ul ul 例如 ul li Category 1 rsaquo li li Category 2 rsaquo li ul 代替 ul
  • WooCommerce 自定义产品类型选项不隐藏自定义产品选项卡

    我刚刚向我的 WC 管理产品页面添加了自定义产品类型选项 add filter product type options this filter product type options 99 1 public function filte
  • 在 WordPress 中获取作者角色

    我正在开发我的第一个 WP 网站 需要在其帖子旁边显示作者的角色 类似于 吉米 管理员 查看可用的作者元数据 http codex wordpress org Function Reference the author meta http
  • 按类别 ID 获取产品

    我正在为 woocommerce 编写一个定价表插件 用户插入带有 woocommerce 产品类别 ID 的短代码 更新页面后 用户可以看到一个包含产品名称和价格列表的表格 我怎样才能获得带有类别ID的产品列表 在下面的代码中 pid是用
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 如何从 Magento One Page Checkout 获取发布数据?

    为了在 Magento Checkout 中添加客户评论字段 我在相应的模板文件中添加了一个文本字段 并使用如下观察器将评论添加到订单中 comment strip tags Mage app gt getRequest gt getPar
  • 更改 Woocommerce 中“我的帐户”页面上的标题

    我见过大量有关如何使用 WooCommerce 我的帐户仪表板重新排序 更改导航和页面的示例 但我一生都无法弄清楚如何更改每个部分的主要标题 我的帐户 订单 下载 地址等 我已经搜索过模板 但没有任何乐趣 我尝试使用条件 php 注释来回显
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 新的 Wp_Query() 或 pre_get_posts() 来查看自定义帖子类型的所有帖子?

    我有一个存档模板文件 显示自定义帖子类型人员的所有帖子 称为 archive personnel php 这是文件的开头

随机推荐

  • Rails file_field 不上传任何内容

    我正在使用 Rails 4 和 Ruby 2 以及 Carrier Wave 以及 jQuery Mobile 1 3 并且用户拥有一个带有徽标的个人资料 我已经在控制台中测试了后端 Carrier Wave 的内容 它可以工作 问题出在表
  • Angularjs:没有 templateURL 的路由和控制器?

    是否可以在没有 templateURL 的情况下使用 Angularjs 的路由和控制器 例如 下面是我当前的路线 控制器和模板网址 return app config routeProvider function routeProvide
  • BackboneJS 使 ID 为整数

    我正在使用 JSON stringify 和 JSON parse 根据对在线数据库的更改来编辑我的 JSON 文件 一切正常 除了在数字周围加上引号 这会搞乱 JSON 文件 例如应该是 id 1但它正在打印出来 id 1 我该如何编辑引
  • 即使禁用 IIS 压缩,为什么 ScriptResource.axd 仍会被压缩?

    我在 IIS 6 0 上运行 ASP NET 应用程序 通常我会为动态和静态文件启用压缩 但是 我暂时关闭了压缩 但 ScriptResource axd 仍然以压缩形式发送 这并不像是配置错误 因为 WebResource axd 未压缩
  • 这个replaceAt函数是如何工作的?

    您能解释一下这段代码是如何工作的吗 String prototype replaceAt function index character return this substr 0 index character this substr i
  • Postgres:为什么使用偏移/限制的子选择性能如此糟糕

    您能帮我理解这些语句之间性能下降的原因吗 对我来说 似乎在 D E 的情况下 他首先将地址加入到所有订阅者中 最后应用偏移和限制 他到底为什么要这么做 我是否遗漏了有关子选择和偏移如何协同工作的信息 他不应该首先找到正确的偏移量 然后开始执
  • jQuery Live 可以在 Safari 上运行吗?

    我刚刚问过这个问题一小时前但对于 IE8 我被告知 JQuery Live 处理程序不支持 更改 所以我切换到 单击 这解决了我的问题 现在我发现 Safari 由于某些奇怪的原因无法使用单击 有人知道吗为什么 所以我在想我可以两者兼得吗
  • gdb:没有可用的瓶子-gdb 安装

    我尝试在我的 M1 Mac OS 11 5 2 上安装 gdb 命令 但出现了 brew 错误 gdb 没有可用的瓶子 I use brew install gdb 这是输出 Error gdb no bottle available Yo
  • 我怎样才能给eclipse更多的内存超过512M?

    我有以下设置 但是当我输入 1024 并将所有 512 替换为 1024 时 Eclipse 根本不会启动 我的 eclipse JVM 如何拥有超过 512M 的内存 startup plugins org eclipse equinox
  • 如何开发“旋转瓶子”应用程序

    我正在制作一个旋转瓶子游戏 我不知道如何通过滑动手指的速度来控制瓶子的旋转速度 我希望它像命运之轮一样工作 你刷得越快 它转得越快 我开始开发UIRotationGestureRecognizer 但我真的不认为这是最好的方法 嘿检查这个演
  • 无法读取 jar 文件中的文件

    我使用 spring boot 开发了一个应用程序 我需要读取包含电子邮件的 csv 文件 这是我的做法的一个片段 public Set
  • 如何在MySQL视图中生成序列号?

    我在Linux下使用MySQL 5 6 我有一个表可以让用户输入发件人号码和收件人号码 然后 有一个视图可以从另一个表中选择一些帐号在发件人号码和收件人号码之间的记录 最困难的问题是用户希望视图中的每条记录都有一个从 1 开始的序列号 例如
  • 有什么理由使用 css box-shadow 而不是 drop-shadow 吗?

    假设客户端兼容 是否有任何情况CSSbox shadow优于filter drop shadow From 文章这好像是drop shadow是硬件加速超集box shadow 这意味着我们基本上应该始终使用drop shadow代替box
  • C# 可以通过管道传输吗?

    我正在尝试使用 TCP 和简单的文本命令来控制网络上的程序 我最终可能会切换到二进制数据 但是 我想知道是否有一种方法可以对程序发送的数据进行编码并通过网络发送 然后对其进行解码并将其提供给接收程序 我当前的代码如下 但我正在尝试找到一种比
  • 比较时间戳与日期变量(MySQL 和 PHP)

    非常感谢任何帮助 假设我有一个 MySQL 数据库 其中时间戳列的值为 1305590400 我如何将其与 PHP 变量 2011 05 17 进行比较 我想完全忽略时间部分 只比较日期 目前我正在尝试让它与以下内容一起工作 但它没有返回结
  • Win32 CRITICAL_SECTION 包含什么?

    Win32 CRITICAL SECTION 包含哪些数据 它有多大 这是没有记录的 大概是特定于实现的 但我很想知道 这是我安装的 Windows Vista SDK 的结果 WinNT h typedef struct RTL CRIT
  • 将 wsHttpBinding 转换为 customBinding

    如何将以下 wsHttpBinding 转换为 customBinding 我需要这样做 这样我就可以增加时钟偏差 这是针对http的
  • 如何获取Windows负载值[重复]

    这个问题在这里已经有答案了 我想使用 Java 从 Windows 获取有关 CPU RAM HDD 网络和进程 服务 列表的数据 如何在不使用第三方库或 JNI 的情况下获取这些系统值 Windows 中是否有类似于 proc 的东西 我
  • 如何绘制具有径向渐变的扇形(iphone)

    如何在 Objective c Core Graphics 中绘制具有径向渐变的扇形 实心圆弧 我用 CGContextDrawRadialGradient 但它画了圆圈 如果你告诉我如何通过径向渐变填充任何形状 那就太好了 谢谢 添加定义
  • 防止 WooCommerce 优惠券堆叠在购物车和结帐页面上

    我需要防止两个特定的优惠券一起使用 我成功地实现了这段代码 它可以防止将这些优惠券堆叠在cart page add action woocommerce before cart check coupon stack function che