当购物车达到一定数量时添加促销产品

2023-11-25

我正在 WooCommerce 中寻找正确的钩子,因为当达到一定的购物车数量(例如 100 个常规单位)时,我需要将促销产品添加到购物车。

我也用过钩子'init'但我认为这是不对的。

这是我的代码:

function add_free_product_to_cart(){
    global $woocommerce;
    $product_id = 2006; 
    $found = false;
    if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) 
    {
        foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) 
        {
            $_product = $values['data'];
            if ( $_product->id == $product_id )
            $found = true;
        }
        if(!$found)
        {
            $maximum = 100;
            $current = WC()->cart->subtotal;
            if($current > $maximum){
                $woocommerce->cart->add_to_cart( $product_id );
            }           
        }       
    }   
}
add_action( 'woocommerce_add_to_cart', 'add_free_product_to_cart' );

我应该使用哪个钩子来达到这个目的?

或者您能给我一个类似问题的相关链接吗?

Thanks


由于您的目标是一定的购物车金额以在购物车中添加促销产品,因此您可以使用woocommerce_before_calculate_totalshook 通过自定义构建的函数来实现这一点。

如果客户更新购物车,您还必须删除该促销商品(它也嵌入在该自定义函数中).

这是代码:

add_action( 'woocommerce_before_calculate_totals', 'adding_promotional_product', 10, 1 );
function adding_promotional_product( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    $promo_id = 99; // <=== <=== <=== Set HERE the ID of your promotional product
    $targeted_cart_subtotal = 100; // <=== Set HERE the target cart subtotal
    $has_promo = false;
    $subtotal = 0;

    if ( ! $cart->is_empty() ){

        // Iterating through each item in cart
        foreach ($cart->get_cart() as $item_key => $cart_item ){
            $product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $cart_item['data']->id : $cart_item['data']->get_id();
            // If Promo product is in cart
            if( $product_id == $promo_id ) {
                $has_promo = true;
                $promo_key= $item_key;
            } else {
                // Adding subtotal item to global subtotal
                $subtotal += $cart_item['line_subtotal'];
            }
        }
        // If Promo product is NOT in cart and target subtotal reached, we add it.
        if( ! $has_promo && $subtotal >= $targeted_cart_subtotal ) {
            $cart->add_to_cart( $promo_id );
            // echo 'add';
        // If Promo product is in cart and target subtotal is not reached, we remove it.
        } elseif( $has_promo && $subtotal < $targeted_cart_subtotal ) {
            $cart->remove_cart_item( $promo_key );
        }
    }
}

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

该代码经过测试并且可以工作。

相关主题:WooCommerce - 自动添加或自动从购物车中删除免费赠品产品

代码更新于(2018-10-01)

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

当购物车达到一定数量时添加促销产品 的相关文章

  • wordpressfunctions.php - 为每个帖子类别使用不同的页面模板

    我想连接到 save post 函数 找出帖子所属的类别 然后为每个类别中的帖子分配不同的页面模板 我已经尝试了大约 30 个不同的版本 但都没有成功 有人可以帮我指出正确的方向吗 add action save post assign c
  • 使用 Sendemail 的 HTML 表单

    我不知道问题出在哪里 mail 工作正常 我已经用一个简单的 php 文件对其进行了测试 但我的表单不发送任何电子邮件 HTML section div class wow fadeIn div div class parallax div
  • 如何?使用 PHP API 提交亚马逊创建配送订单 XML

    我现在正在努力使用 Amazon API 我正在尝试创建履行订单 将订单发送到亚马逊以供他们履行 我首先需要创建我使用过的文档 的XMLhttp www jyi org wp content uploads Amazon xml pdf h
  • 如何在codeigniter中设置cookie

    我尝试了以下设置 cookie 的代码 但无法获取 cookie if this gt input gt post remember this gt load gt helper cookie cookie array name gt re
  • 将多个单词类别显示为带破折号的 1 个单词

    我有一些具有与其关联的类别的子页面 对于超过 1 个单词的类别 例如 测试类别 我需要输出为 1 个单词 空格用破折号分隔 例如 测试类别 如何重写函数来处理这个问题 public function CategoriesList if th
  • 多个提交按钮

    我在 HTML 和 PHP 中遇到多个提交按钮时遇到问题 我尝试为基于 Web 的计算器编写 GUI 代码 这确实很容易 但是 php 中的函数并不那么容易 所以我有这个简单的 GUI 有 6 个提交按钮
  • Memcached 获取慢、CPU 使用率高

    我在机器上运行了一个 memcached 实例来承受数据库的压力 目前 通过 PHP 每秒约有 350 个请求 根据 memcached 文档 这应该是完全可行的 但我发现 get 时间慢得离谱 平均约为 60 毫秒 双向都有峰值 0 1
  • 使用PHP将图像旋转45度时如何避免黑色背景?

    您好 我必须先翻转缩略图 然后才能将其与另一个 jpeg 文件合并 但是当我使用 php ini 旋转 45 度时它显示黑色背景 我怎样才能避免这种情况 任何机构都可以帮助我 好吧 如果您要生成 jpg 请使用 PHP GD 将背景颜色设置
  • Symfony2:间歇性高响应时间/缓慢 SessionHandlerProxy::read() 完成

    我看到来自 Symfony2 会话管理器组件的非常奇怪的行为 特别是 SessionHandlerProxy read 函数在我的生产环境中有时会非常慢 Symfony Component HttpFoundation Session St
  • Memcached set() 失败:写入失败

    因此 Memcached 无法写入某些键 getResultMessage 说WRITE FAILURE我在设置中使用它 this gt mmcache new Memcached this gt mmcache gt addServer
  • in_array() 和 array_key_exists() 有什么区别?

    我在这里有疑问 实际上 两者有什么区别in array and array key exists 我试图找到这个 但我仍然很困惑 我可以得到一份样品吗 Thanks in array versus array key exists 不同之处
  • PHP APC 加载 apc.so 时出错

    我最近通过 WHM 面板 Web 主机管理器 在我们的服务器上安装了 PHP APC 安装成功后 我以为一切都很好 然而第二天我注意到我们的 error log 文件变得相当大 经过检查我多次注意到以下行 PHP 警告 PHP 启动 无法加
  • 使用 Zend 实现 WURFL 时出现错误

    我环顾四周 似乎找不到与我有同样问题的人 希望我没有错过这里的叮当声 我想要获取每个用户的设备浏览器信息 我目前计划在引导程序中执行此操作 遵循我在 PHP 会议上看到的内容 为此我遇到了 http framework zend com m
  • 检查 PHP 数组中哪一天不可用

    我有一个由 7 天名称组成的数组 这个数组每次都是动态的 所以我想检查数组中缺少哪一天 对于前 周一 周二 周四 周五 周六 周日 此处缺少星期三 因此输出应为星期三 有时会丢失多于一天 有时则没有 因此输出应该是包含所有丢失天数的数组 您
  • 编辑表单以清理/验证电话号码

    我对 PHP 的经验非常有限 我真的希望有人可以帮助我 我想要做的是清理 验证输入的电话号码 以便只允许使用数字 我想我需要使用FILTER SANITIZE NUMBER INT但我不确定在哪里或如何使用它 这是我的代码
  • Laravel 自定义授权

    我在这里进行登录验证 LoginData Input except array token if Auth attempt LoginData return success 我的表不同 所以这里我更改表名称auth php table gt
  • 解决 php 常见冲突的最佳方法:忽略、修复还是其他?

    我正在尝试在 CentOS 6 上的 PHP 5 3 3 上安装 Soap 模块 来自 webtatic PHP 5 6 当我运行 yum 命令时yum install php56w soap要安装它 我收到以下消息 错误 php56w c
  • 如何使用symfony2中的findOneBy方法返回数组而不是对象?

    我有一种情况 我想使用 symfony2 中的 findOneBy id 方法查询数据库 namePosting this gt getDoctrine gt getRepository MyBundle Users gt findOneB
  • 限制在WhereHas内

    所以我想获取最后状态等于给定状态的请求 我尝试过first 但它给了我一个错误并且限制不起作用 requests Request whereHas requestStatus function query use status return
  • 如何将react-native与php一起使用并获取返回数据始终为空

    我的回报始终为空 我似乎无法让它发挥作用 我如何将react native与php一起使用并获取json 任何人都可以帮忙吗 PHP myArray array myArray lat POST lat myArray lng POST l

随机推荐

  • 如何在Python中清空套接字?

    我需要清空套接字上的数据 确保没有任何内容可接收 不幸的是 python 套接字模块中没有此功能 我已经这样实现了一些东西 def empty socket sock remove the data present on the socke
  • VBA 中的格式(SomeDate,"MM/dd") = "12-15"

    我正在 Excel 中编写一个 VBA 宏 用于分析电子表格中的数据并发送电子邮件 在这个宏中 我必须附加格式为 MM dd 的日期 但输出的格式为 MM dd 所以问题是 为什么我的斜杠被破折号取代了 为简单起见 我已将代码简化为此示例
  • Marketplace Windows Phone Beta 测试错误代码:805a0194

    在市场中添加应用程序进行 Beta 测试后 当我尝试打开应用程序 Beta 测试人员中的链接时 显示错误代码 805a0194 并且没有一个测试人员可以下载应用程序进行测试 该怎么办 这是什么错误 将应用程序添加到应用程序中心已经过去了 2
  • GS1条码解析

    我们需要解析对方提供的 GS1 datamatrix 条码 我们知道他们将使用 GTIN 01 批号 10 有效期 17 序列号 21 问题是条码阅读器输出一个字符串 格式如下 01076123456789001710050310AC345
  • 随机不重复?

    我想编写一个程序 以随机顺序显示列表的所有元素而不重复 在我看来 它应该有效 但只能重复打印这些元素 import random tab for i in range 1 8 item random choice house word co
  • 如何使用 Python 单击 HTML 页面上的某些链接时打开 Windows 文件夹

    我正在编写以下程序 import os filepath r C TestData openfolder html abc open filepath w abc writelines abc writelines a href os st
  • 设置必须采用“名称=值”的形式。不知道该怎么办

    因此 我正在解析 Azure 存储帐户的连接字符串 当我到达使用连接字符串的应用程序页面时 编译器捕获一个异常 指出 设置必须采用 名称 值 的形式 这是否意味着我应该更正设置 appSettings 的 app config 文件中的某些
  • Angular 2 令人惊叹的动画

    Angular 2 RC2 刚刚问世 我想知道它是否已经支持交错动画 ngFor DSL语言文档提到group and sequence但没有任何形式的摇晃 RC2中不包含交错动画吗 我不确定我是否同意 G nter 的观点 即 ng co
  • 如何修复“模块‘tensorflow’没有属性‘估计器’”错误

    我正在使用 conda 通过 YAML 创建的 env pip 在我的 Linux Mint 盒子上设置 Tensorflow v1 13 1 环境 设置后 每当我尝试导入时tf estimator我收到AttributeError标题中描
  • 如何将 tweepy Twitter 流保存到文件中?

    我有一个工作脚本 可以成功收集提到 stackoverflow 的推文 但是 我想在 iPython 中运行该脚本 而不是执行单独的 py 文件 理想情况下 我只想打开它的 ipyb 文件 选择全部运行 然后让它运行一周左右 当然不要关闭我
  • 如何避免 cmd.exe 弹出命令窗口

    我有一个命令 cmd exe c ping 1 1 1 1 n 1 w 10000 echo second command goes here 但执行时它会打开一个命令窗口 有没有办法避免弹出命令窗口 PS 我无法从那里删除 cmd exe
  • 使用 Fetch API 读取分块的二进制响应

    如何使用 Fetch API 读取二进制分块响应 我正在使用以下代码 该代码可以从服务器读取分块响应 然而 数据似乎以某种方式编码 解码 导致getFloat32有时会失败 我尝试使用curl 读取响应 效果很好 这让我相信我需要做一些事情
  • 在 constrOptim 中设置约束

    有没有一种简单的方法可以在 constrOptim 函数中为以下约束设置 theta ui ci c1
  • 如何使用 Eloquent 对分组结果进行排序?

    我已经尝试解决这个问题有一段时间了 但似乎无法使其发挥作用 我有一张与此类似的桌子 表 问题 id yearly issue year stock created at updated at magazine id 1 10 2000 1
  • 如何使用 HTML 验证日期范围?

    或者 是否可以使用 HTML 验证另一个字段的值 一个常见的示例是选择一个日期范围 其中 起始 日期应小于或等于 截止 日期 如果您可以在语法中使用元素引用 则以下内容将描述值之间所需的关系
  • 更改 Velocity.Log 文件的位置

    看起来很简单 文档位于http velocity apache org engine devel developer guide html Configuring Logging说要设置runtime log属性 这是我所有财产的所得 ve
  • 获取android中用户的语言

    http web archiveorange com archive v fwvde0wN3xcViMtADw6x 似乎 navigator language 属性在 android 上的 webview 中始终为 en 那么 获取用户语言
  • 确定硬币组合的算法

    最近 我遇到了一个关于编程算法的提示 但我不知道该怎么做 我以前从未真正编写过算法 所以我在这方面还是个新手 该问题要求编写一个程序来确定收银员根据硬币价值和硬币数量找零的所有可能的硬币组合 例如 一种货币可能有 4 个硬币 2 分 6 分
  • 有没有办法获取当前函数的函数名?

    defun foo send to debug log Error Function terminated get current function name 我目前这样做 defun foo send to debug log Error
  • 当购物车达到一定数量时添加促销产品

    我正在 WooCommerce 中寻找正确的钩子 因为当达到一定的购物车数量 例如 100 个常规单位 时 我需要将促销产品添加到购物车 我也用过钩子 init 但我认为这是不对的 这是我的代码 function add free prod