即使 WooCommerce 中的购物车为空,也可通过 URL 中的 GET 方法应用优惠券折扣

2023-11-24

我有一个插件,可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中。当观众收到这封电子邮件时,我想创建一个流程,他们可以在其中单击电子邮件中的“立即购买”,优惠券将自动添加。

截至目前,对于“立即购买”按钮下的链接,我已输入以下内容:

websitename.biz/cart__trashed?code=DISCOUNTCODE

处理$code我已将其放入我的functions.php 文件中:

add_action('woocommerce_before_cart', 'discount');
function discount( ) {
    global $woocommerce;
    $code= $_GET["code"];
   if(!empty($code)){       
    if($woocommerce->cart->add_discount($code)){ 
    echo '<div class="woocommerce_message"><strong>Applied coupon!</strong></div>';
        }
    }
}

我在这里面临的问题是:

  • 如果观众访问网站时购物车中没有任何商品,则不会使用优惠券。
  • 如果添加了一些东西并保留在那里(因为 cookie),那么优惠券代码就可以完美应用。

我相信这是因为购物车是空的,代码不起作用。

只是希望当观众单击链接时应用代码。

我怎样才能让它发挥作用?


正确的做法应该是:

  • 将购物车会话中 URL 中的优惠券代码设置为自定义数据。
  • 当客户将第一个商品添加到购物车时,应用此优惠券代码的折扣。
  • 如果客户清空购物车,则从此优惠券中删除折扣

您可以从任何网址设置任何现有的优惠券代码(例如商店页面、其他档案页面、产品页面、我的帐户页面或任何现有页面)添加到此现有网址:
?code=DISCOUNTCODE在最后
(where DISCOUNTCODE是您的优惠券代码名称).

这是代码:

// Set coupon code as custom data in cart session
add_action('wp_loaded', 'add_coupon_code_to_cart_session');
function add_coupon_code_to_cart_session() {
    // Exit if no code in URL or if the coupon code is already set cart session
    if( empty( $_GET["code"] ) || WC()->session->get( 'custom_discount' ) ) return;

    if( ! WC()->session->get( 'custom_discount' ) ) {
        $coupon_code = esc_attr($_GET["code"]);
        WC()->session->set( 'custom_discount', $coupon_code );
        // If there is an existing non empty cart active session we apply the coupon
        if( ! WC()->cart->is_empty() ){
            WC()->cart->add_discount( $coupon_code );
        }
    }
}

// Add coupon code when a product is added to cart once
add_action('woocommerce_add_to_cart', 'add_coupon_code_to_cart', 10, 6 );
function add_coupon_code_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
    $coupon_code = WC()->session->get( 'custom_discount' );
    $applied_coupons = WC()->session->get('applied_coupons');

    if( empty($coupon_code) || in_array( $coupon_code, $applied_coupons ) ) return;

    WC()->cart->add_discount( $coupon_code );
}

// Remove coupon code when user empty his cart
add_action('woocommerce_cart_item_removed', 'check_coupon_code_cart_items_removed', 10, 6 );
function check_coupon_code_cart_items_removed( $cart_item_key, $cart ){
    $coupon_code = WC()->session->get( 'custom_discount' );

    if( $cart->has_discount( $coupon_code ) && $cart->is_empty() );
        $cart->remove_coupon( $coupon_code );
}

代码位于活动子主题(或活动主题)的 function.php 文件或任何插件文件中。

这是经过测试并且有效的

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

即使 WooCommerce 中的购物车为空,也可通过 URL 中的 GET 方法应用优惠券折扣 的相关文章

  • 如何使用PHP在服务器端缩小图像?

    我有一些从服务器提取的图像 imgUrl保存图像的路径 现在我用 img src width 100 height 200 或 CSS 来缩小图像 但我想在 PHP 中执行此操作 以便将已缩放的图像提供给 DOM 有任何想法吗 Thanks
  • Laravel Valet 不工作。 127.0.0.1 连接被拒绝

    试图让代客泊车设置正常工作 当访问 127 0 0 1 时 连接被拒绝 这是我在访问 dev 站点设置之一时收到的消息 我已经确保 apache 已停止 并且一直在谷歌上搜索所有地方 但无法找到解决方案 有没有人遇到过这个或对下一步尝试什么
  • PHP 生成文件供下载然后重定向

    我有一个 PHP 应用程序 它创建一个 CSV 文件 强制使用标头下载该文件 这是代码的相关部分 header Content Type application csv header Content length filesize NewF
  • Zend 1.11 和 Doctrine 2 自动从现有数据库生成所需的一切

    我是 ORM 新手 我真的很想学习它 我按照本教程成功地使用 Zend 1 11 x 安装了 Doctrine 2 1 的所有类和配置 http www zendcasts com unit testing doctrine 2 entit
  • 在 WooCommerce 中检查购物车中的多个产品 ID

    我使用以下代码来检查产品 ID 是否在购物车中 如果是 则添加额外的结帐字段 add action woocommerce after order notes conditional checkout field function cond
  • 防止重复数据输入mysql数据库

    我试图让我的电子邮件订阅服务拒绝数据库中已存在的电子邮件 这样用户就不会订阅同一封电子邮件两次 这就是我所拥有的 但它不起作用 有什么想法吗
  • 如何自动更新数据库中的记录?

    我有一个工作表 在其中插入新工作 该表还包含职位发布日期 默认情况下 当发生新插入时 作业状态为打开状态 现在 当作业超过 30 天时 我想将作业状态从开放更改为关闭 我该怎么做 尝试创建一个每天运行的事件 如下所示 CREATE EVEN
  • 如何在 php 中访问名为变量的对象属性?

    以 JSON 编码的 Google API 返回一个如下所示的对象 updated gt stdClass Object t gt 2010 08 18T19 17 42 026Z 任何人都知道我如何访问 t value object gt
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • drupal 7 将实际内容存储在数据库中的哪里?

    我打开了 drupal 7 的数据库并在表中查找node node revisions and node types并且找不到 drupal 存储实际的位置body节点 内容 的 有人有线索吗 哦 我刚刚找到了 在 D7 中 他们实现了字段
  • 如何在按钮上执行mysql [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions PHP 单击按钮时如何执行 SQL
  • PHP $_SERVER['REMOTE_HOST'] 返回 ::1 [重复]

    这个问题在这里已经有答案了 可能的重复 应该 ip SERVER REMOTE ADDR 在 mamp 本地主机上返回 1 https stackoverflow com questions 3699454 should ip server
  • 正在 WordPress 中上传媒体,但显示错误“上传时发生错误。请稍后重试。”

    我试图在 WordPress 媒体上传中上传 jpeg 图像 上传时 显示错误 上传时发生错误 请稍后再试 上传时出现错误消息 但是当我重新加载页面时 图像显示在列表中 如下所示 重新加载页面后 所以 图片正在上传 这意味着不存在文件夹权限
  • 在脚本中使用未定义常量

    我搜索了该网站并看到了对用户应该在变量周围加上单引号的问题的修复 但我仍然有点困惑 错误 全部参考第28行 注意 使用未定义的常量 log id 假定为 log id 注意 使用未定义的常量 log username 假定为 log use
  • 控制器 HMVC 内的 CodeIgniter 负载控制器

    我在用着http github com philsturgeon codeigniter template http github com philsturgeon codeigniter template 对于模板 我尝试将其他控制器视图
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • 使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误

    当我使用时 htaccess对于以下 PHP 设置 我得到500 Internal Server Error访问网站时 中的代码 htaccess file php flag display errors off php flag log
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误

随机推荐

  • strstr 的纯字节版本?

    是否有一个 strstr 版本可以在可能包含空字符的固定长度内存上工作 我可以这样表达我的问题 strncpy 与 memcpy 的关系与 strstr 的关系相同 memmem 不幸的是它是 GNU 特定的而不是标准 C 但是 它是开源的
  • 通过名称模糊匹配创建唯一 ID(通过使用 R 的 agrep)

    使用 R 我尝试匹配按年份和城市构建的数据集中的人名 由于一些拼写错误 不可能进行精确匹配 因此我尝试使用 agrep 来模糊匹配名称 数据集的样本块的结构如下 df lt data frame matrix c 1200013 12000
  • 你能用 Go 在内存中“固定”一个对象吗?

    我有一个 Go 对象 我希望其在内存中的地址保持不变 在 C 中 我们可以固定对象在内存中的位置 Go 有办法做到这一点吗 您保留引用的对象不会移动 没有句柄或间接寻址 您获得的地址是永久的 From 文档 请注意 与 C 不同 返回 a
  • 有什么更快的方法可以找到“幸运三元组”的数量?

    我正在研究一个代码挑战问题 寻找幸运三元组 幸运三重 被定义为 在列表中lst 对于三元组的任意组合 lst i lst j lst k where i lt j lt k where lst i divides lst j and lst
  • 具有 ECDHE 密钥和证书的服务器无法正常工作

    我使用下面的 server c 源代码 我生成了 sinful host cert pem sinful host key 如此处所述 椭圆曲线 CA 指南 运行程序时出现以下错误 140722397161136 错误 10071065 椭
  • 在 ggplot 中展开分类 x 轴

    我不知道如何使用expand within scale x discrete 扩展分类 x 轴 以便将标签放置在点的右侧不会脱离绘图 我知道如果 x 是数字 我可以简单地调整 x 的最大限制 以便所有点都向左移动 但是 我无法弄清楚如何使用
  • SQL Server 导入向导将 NULL 视为文字字符串“NULL”

    当我尝试导入 csv以逗号分隔的平面文件转换为Microsoft SQL server 2008R2 64 bit instance for string列aNULL原始数据变成文字字符串 NULL 并在一个numeric列我收到导入错误
  • 内存警告 UIImagepickerController IOS 7

    任何人都可以帮助我解决这个问题吗 我对 Objective C 和 iOS 有点陌生 我一直在研究它 但我不知道如何解决这个问题 我的应用程序非常简单 它只启动相机拍照并通过电子邮件将它们发送到我们的服务器 这段代码在 iOS6 中运行得很
  • jQuery Mobile 导航还是更改页面?

    随着 jQuery Mobile 1 3 的到来 navigate 已添加功能 我听说这是更改页面的推荐方法 而且它们似乎解决了页面之间传输数据的问题 问题是 既然它已经被简化了 我如何访问其他选项changePage提供 我真的很想使用的
  • mongodb 归档格式是什么?

    我已经使用它们的存档选项备份了一些 mongoDB 但我不能简单地解压它们 当我执行一些步骤来解压缩数据时 存档看起来像是一个大文件中的整个数据库 我想获取各个收藏的文件 有没有办法做到这一点 tar xvf valk archive ta
  • 如何将网址中的双斜杠/多斜杠替换为单斜杠

    我有一个像这样的网址 http 127 0 0 1 7000 test test index html 预期输出 http 127 0 0 1 7000 test test index html 我使用这个正则表达式 http 2 输出是
  • 我的 Rails Javascript 清单文件既不编译也不包含任何所需的文件

    我看过一些与此类似的帖子 但没有解决方案 所以我想我会提出一个更有记录的问题 我的问题清单文件中的 JS 不包含或编译任何 JS 当在本地运行我的服务器并打开 JS 文件时 我看不到任何编译内容 只有标准的 application js 清
  • 在 Objective-C 中,在每个类中导入相同的头文件会使编译时间更长吗?

    我是 Objective C iOS 编程的初学者 我想制作一个头文件 其中包含我在项目中使用的所有类头 并在每个类头文件中导入头文件 就像这个问题 在同一个头文件中包含多个类 但这种方法会增加编译时间吗 或者还有什么其他的缺点吗 请告诉我
  • func_num_args、func_get_arg 和 func_get_args 从 php 5.2 到 5.3 的行为差异

    我看过PHP手册 但我不明白 PHP 早期版本和更高版本之间的行为差 异 我不明白这个说法 由于该函数依赖于当前作用域来确定参数详细信息 因此在 5 3 0 之前的版本中不能将其用作函数参数 如果必须传递该值 则应将结果分配给一个变量 然后
  • Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块

    这是我在 StackOverflow 上发表的第一篇文章 我会尽力使其尽可能正确和完整 如果您有任何改进我的文章的建议 我会很乐意接受 我在运行使用 Tkinter 的 Python 编写的代码时遇到问题 我将尝试详细描述我的操作 以便于识
  • 将 HTML 转义字符解码回 C# 中的正常字符串

    我的问题很简单 我在网上搜索了一下 但找不到一种快速方法来对字符串中的 HTML 文本进行转义 例如 lt gt amp 应以字符串形式返回 有没有一种快速的方法 或者我必须编写自己的 unescaper use System Web Ht
  • 在Android应用程序中获取用户的位置权限[重复]

    这个问题在这里已经有答案了 I m trying to get the users actual location with the typicaly permissions box like this 如果有人知道如何制作 请回答 在运行
  • 无法更新 UITableViewCell 中 UI 对象的框架

    我有一个子类 UITableViewCell 我需要动态更改 UILabel 的框架 这是我所做的 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath
  • XSLT 转换子目录中的多个文件

    我创建了一个可以转换单个 XML 文件的 XSLT 文件 但是 我有数百个包含多个 xml 文件的目录 XSLT 有没有办法转换所有这些文件 我正在使用集合功能来获取所有文件的列表 但是 现在不确定如何应用转换 这是我的示例 XSLT 文件
  • 即使 WooCommerce 中的购物车为空,也可通过 URL 中的 GET 方法应用优惠券折扣

    我有一个插件 可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中 当观众收到这封电子邮件时 我想创建一个流程 他们可以在其中单击电子邮件中的 立即购买 优惠券将自动添加 截至目前 对于 立即购买 按钮下的链接 我已输入以下内容 websi