在 WooCommerce 结账前提供强制性优惠券(可选:针对特定产品)

2023-12-07

我想强制客户在结帐之前添加优惠券代码。我希望它适用于我的 WooCommerce 商店中的每个优惠券代码和每个产品。

我正在使用这个代码,它几乎解决了问题,但它只适用于单个优惠券代码(freev1)

如何才能使其适用于生成的每个优惠券代码?

add_action( 'woocommerce_check_cart_items', 'mandatory_coupon_code' );
function mandatory_coupon_code() {
    // HERE set your coupon code
    $mandatory_coupon = 'freev1';

    $applied_coupons = WC()->cart->get_applied_coupons();

    // If coupon is found we exit
    if( in_array( $mandatory_coupon, $applied_coupons ) ) return;

    // Not found: display an error notice
    wc_add_notice( __( 'Add coupon before checkout.', 'woocommerce' ), 'error' );
}

只需检查是否$applied_coupons为空,空时添加通知。消除$mandatory_coupon & if ( in_array...

所以你得到:

function action_woocommerce_check_cart_items() {
    // Isset
    if ( WC()->cart ) {
        // Get applied coupons
        $applied_coupons = WC()->cart->get_applied_coupons();

        // When empty
        if ( empty ( $applied_coupons ) ) {
            // Not found: display an error notice
            wc_add_notice( __( 'Add coupon before checkout.', 'woocommerce' ), 'error' );   
        }
    }
}
add_action( 'woocommerce_check_cart_items', 'action_woocommerce_check_cart_items', 10 );

Update:

要将其应用于购物车中的特定产品,请使用:

function action_woocommerce_check_cart_items() {
    // The targeted product ids
    $targeted_ids = array( 30, 815 );

    // Flag
    $found = false;
    
    // Isset
    if ( WC()->cart ) {
        // Get applied coupons
        $applied_coupons = WC()->cart->get_applied_coupons();

        // When empty
        if ( empty ( $applied_coupons ) ) {
            // Loop through cart items
            foreach ( WC()->cart->get_cart() as $cart_item ) {
                if ( array_intersect( $targeted_ids, array( $cart_item['product_id'], $cart_item['variation_id'] ) ) ) {
                    $found = true;
                    break;
                }
            }
        }
    }
    
    // True
    if ( $found ) {
        // Not found: display an error notice
        wc_add_notice( __( 'Add coupon before checkout.', 'woocommerce' ), 'error' );
    }
}
add_action( 'woocommerce_check_cart_items', 'action_woocommerce_check_cart_items', 10 );

附加问题:

“是否可以使用几乎相同的代码,但使其在结帐页面上工作并强制之前使用优惠券 下订单吗?”

你可以替换woocommerce_check_cart_itemswoocommerce_checkout_process结账页面的钩子

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

在 WooCommerce 结账前提供强制性优惠券(可选:针对特定产品) 的相关文章

  • C++ 相当于 PHP 的 pack()

    我的问题很简单 有没有类似 PHP 的pack and unpack C STL 中的函数 如果没有 是否有其他方法可以实现相同的目标 https www php net pack https www php net pack Thanks
  • Codeigniter:Base_url 似乎不起作用

    我开发了一个简单的网站 可以从 Twitter 公共时间线获取推文 将其缓存 60 秒等等 我最近将主机从 Hostgator 移至 Mediatemple 我的网站之前在 Hostgator 上运行良好 我的应用程序不使用数据库连接 也不
  • 在Windows上安装php Composer时出现错误

    在安装 Composer 以使用 Laravel 框架时 我遇到了一些错误 Download failed file get contents SSL operation failed with code 1 OpenSSL Error m
  • PHP 中 file、file_get_contents 和 fopen 之间的区别

    我是 PHP 新手 我不太确定 两者之间有什么区别file file get contents and fopen 函数 什么时候应该使用其中一个而不是另一个 前两个 file http www php net manual en func
  • TCPDF / FPDI 可以接受 PDF 作为字符串吗?

    是否可以将 TCPDF 或 FPDI PDF 作为字符串提供 我有一个传入的 PDF 数组作为字符串 但无法写入磁盘 我在文档中找不到与此相关的任何内容 如果没有 是否有一种有效的方法来从内存或作为对象存储 读取这些 PDF 将它们喂给 F
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • PHP 中的抽象类是什么?

    PHP 中的抽象类是什么 如何使用 抽象类是至少包含一个抽象方法的类 该方法中没有任何实际代码 只有名称和参数 并且已被标记为 抽象 这样做的目的是提供一种模板来继承并强制继承类实现抽象方法 因此 抽象类是介于常规类和纯接口之间的东西 此外
  • 根据类别 woocommerce 更改同一产品的默认变体值

    我正在研究一种根据其所属类别显示同一产品的默认变体值的方法 例如 我出售一张带有蓝色和红色选项的卡 当用户进入 一 类别时 我希望默认值为蓝色 如果他属于第二类 则该值将为红色 我发现了一个钩子woocommerce product def
  • PHP别名@函数

    我是 PHP 新手 看到一些使用 前缀调用函数 如 mysql ping 的示例 我感到很困惑 它是做什么用的 谷歌搜索 搜索没有太大帮助 因为 被丢弃并且 别名 不是足够好的关键字 抑制错误 警告和通知 如果你用自定义的方式补充它 你可以
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • 如何在 WordPress/WooCommerce 3+ 中向评论表单添加自定义字段

    我正在尝试在产品评论中添加 电话 字段 WooCommerce 3 针对未注册用户 来宾 电话号码只能由管理员在管理面板中看到 电话字段需要填写 Required 我尝试了这段代码 但这不起作用 function true phone nu
  • MySQL 中布尔值的 TINYINT 与 ENUM(0, 1)

    MyISAM 表和 MySQL 5 1 中具有 0 和 1 值的 Tinyint 或 ENUM 0 1 哪个更好 您可以使用BIT 1 如中提到的MySQL 5 1 参考 http dev mysql com doc refman 5 1
  • 我的CSS出了什么问题?活动链接不改变颜色

    我无法让我的 WordPress 菜单活动链接保持红色 我添加了我认为与导航相关的 CSS 还有正文等 以防影响问题 感谢您的帮助 body font family Helvetica Neue sans serif font size 1
  • phpstorm xdebug 与 symfony2 项目

    我正在尝试使用 xdebug 和 phpstorm 调试 symfony2 应用程序 我的本地开发环境是Ubuntu 14 04 with apache2 Xdebug版本是2 2 7 我在另一个 php 不是 symfony2 项目上使用
  • 您可以使用 MySQL 查询来完整创建数据库的副本吗

    我有一个包含 5 个表的 MySQL 数据库的实时版本和一个测试版本 我不断使用 phpMyAdmin 将实时版本中的每个表复制到测试版本 有谁有mysql查询语句来制作数据库的完整副本吗 查询字符串需要考虑结构 数据 自动增量值以及与需要
  • PHP 中的坏词过滤器?

    我正在用 PHP 编写一个坏词过滤器 我在数组中有一个坏词列表 方法 clean text 的写法如下 public static function cleanse text originalstring if self is sorted
  • 如何更改phpmyadmin MySQL的IP地址?

    我在 xampp 中更改了 apache 的 IP 地址 但无法连接到 MySQL 我认为问题是我的 apache 不在我的数据库的同一网络上 我的 apache 位于 192 168 1 10 而我的 MySQL 位于 127 0 0 1
  • 在 PHP 命令行上显示完整的堆栈跟踪

    Problem 我的 PHP 堆栈跟踪缩写为 Stack trace 0 www html table app create php 128 SoapClient gt call call Array 1 www html table ap
  • MYSQL 按喜欢/不喜欢和受欢迎程度排序

    我有评论表 其中包括喜欢和不喜欢的内容 现在我在正确的顺序上遇到了问题 实际上 我的系统在顶部显示了最多点赞的评论 我正在 youtube 上寻找类似系统的东西 这意味着 100like 100dislikes 的评论的顺序高于 1 1 我

随机推荐

  • fwrite 从头开始​​写入而不删除

    我正在使用 PHP 和 fwrite 代码 但我希望每个写入位置都从文件的开头开始 而不擦除其内容 我正在使用这段代码 但它正在写入文件末尾 fr fopen aaaa txt a fwrite fr text fclose fr 那么您想
  • 对于字符串距离,是否有比 Levenshtein 更快(不太精确)的算法?

    我想运行 Levenshtein 但速度要快得多 因为它是我正在构建的实时应用程序 一旦距离大于10 它就会终止 从评论来看 人们似乎对Sift3 http sift codeplex com
  • Angular CLI + Angular 4 = IE10 不起作用

    我无法让 IE10 加载全新的 Angular CLI 项目 当您运行 ng new 时 除了默认 Angular CLI 包附带的代码之外 没有其他代码 我正在使用 Angular 4 2 4 angular cli 1 3 1 和 IE
  • 使用 Google 跟踪代码管理器和 Google Analytics 来跟踪 Chrome 扩展程序 (2020)

    我正在开发一个 Chrome 扩展 我希望能够使用谷歌分析来跟踪指标 我相信最简单的方法是通过标签管理器 我发现this解释如何在 Chrome 扩展中实现 google 标签管理器的教程 但是 仅遵循本教程对我来说不起作用 我有几个问题
  • 无法打开堆栈跟踪文件'/data/anr/traces.txt/:权限被拒绝

    我是 Android 开发新手 我正在从这本书中学习 Androidhttp www informit com store product aspx isbn 9780321673350 我已经读到第10章了 一切正常 但当我单击 设置 选
  • 目录递归

    如果需要递归遍历目录树 有两种方法可以实现 建立越来越长的路径名 等 当您到达每个目录时 使用 chdir 逐步进入每个目录 因此您永远不会处理超过两个组成部分的路径名 在我看来 第一种方法更明显 并且可能更能抵御不幸事件 例如在中途卸载某
  • 覆盖 MEF 中的 dll

    现在 我正在尝试将一组不断变化的类分离到它们自己的 dll 中 并使用 MEF 动态加载它们 我的问题是 每当我在应用程序运行时尝试覆盖 dll 时 它都会说它正在使用中 是否有办法配置 MEF 让我覆盖 dll 并在应用程序仍在运行时获取
  • 哪个更正确:

    ...

    ...

    两者都是 h1 a a h1 and a h1 h1 a 有效的 HTML 还是只有一个正确 如果它们都正确 那么它们的含义有不同吗 两个版本都是正确的 它们之间最大的区别在于 在以下情况下 h1 a a h1 只有标题中的文本才是可点击的
  • 如何在 Python 中使用 Pillow 库向 PNG 图像添加轮廓/描边/边框?

    我正在尝试使用 Pillow python imaging library Python 库在我的 png 图像周围创建轮廓 描边 边框 选择任何颜色和宽度 您可以在这里看到原始图像和我想要的结果 由手机应用程序创建 https i sta
  • iOS UINavigationBar 按钮在 segue 返回后仍然褪色

    在我的应用程序中 我有多个视图控制器 并且大多数都有一个右侧UIBarButtonItem附加直接 显示 segue 操作 转到另一个视图然后按 lt Back 按钮时 原始按钮项目仍然淡出 但仍可用 这似乎只发生在 iOS 11 2 下
  • 我如何正确引用这个 bash 管道来观看?

    我已经建立了这个管道 echo scale 2 cat io grep wchar awk print 2 1024 3 bc 现在我正在努力watch它 我对 Bash 的了解确实是临时的 所以我没有取得成功 尝试过类似的事情 watch
  • 如果 x 是该字典中的值

    我想做这个 d 1 2 3 4 if 4 in d print Aha 但我想读取值而不是键 Pythonic 的方法是什么 Use values1 d 1 2 3 4 if 4 in d values print Aha 请注意 这将比键
  • MySQL 查询与别名 WHERE 匹配不起作用

    为什么我的语法不正确 SELECT MATCH tags title description AGAINST asd jhbdckdsb IN BOOLEAN MODE AS score FROM blogs WHERE score gt
  • 如何使用 c# 使用 Sharpsvn 客户端读取文件的每个修订版本?

    如何使用 c 使用 Sharpsvn 客户端读取文件的每个修订版本 不是修订号 而是每个修订版中文件的内容 您可以使用 SvnClient FileVersions 来执行此操作 如类似的问题 public void WriteRevisi
  • 如何在magento网站中创建新页面

    我正在尝试在 magento 中创建一个新页面 其中我必须添加一些 html 和 javascript 为此 我创建了一个模块 gt app code local CompanyName HelloWorld etc config xml
  • JavaFx 和 @FXML 中的访问修饰符

    我是 JavaFx 的新手 在我看过的一些教程中 存在一些差异 在其中一篇教程中 他总是使用private作为控制器类中的访问修饰符并这样写 FXML private Button button 但其他教程始终使用 public 并且没有在
  • 按组对 data.frame 执行基于向量的操作

    我在这里看到了一些相当类似的问题的答案 但是 我的大脑在将我读到的内容直接应用到我的数据方面遇到了一些困难 我想从组织成组的较大数据框中减去 data frame 中包含的向量 在这种情况下 我有一个标准参考 dfRef 我想从几个重复的实
  • Android SensorManager.getOrientation() 返回 -PI/2 和 PI/2 之间的俯仰角

    我正在设计一个需要检查设备方向 方位角 俯仰和滚动 的应用程序 我使用以下代码来实现此目的 Override public void onSensorChanged SensorEvent event if event sensor get
  • WHERE Something IN(CASE WHEN 语句)?

    我想根据条件条件写一个 select子句 我有错误 Msg 512 Level 16 State 1 Line 2 Subquery returned more than 1 value This is not permitted when
  • 在 WooCommerce 结账前提供强制性优惠券(可选:针对特定产品)

    我想强制客户在结帐之前添加优惠券代码 我希望它适用于我的 WooCommerce 商店中的每个优惠券代码和每个产品 我正在使用这个代码 它几乎解决了问题 但它只适用于单个优惠券代码 freev1 如何才能使其适用于生成的每个优惠券代码 ad