对 WooCommerce 中最便宜的购物车商品应用 100% 优惠券折扣

2023-11-24

我创建了一个'BOGOF'(买一送一)优惠券,使用正常的 woocommerce 优惠券方法。

该优惠券为用户提供购物车中其他 1 件商品 100% 的折扣。


优惠券设置

General:

  • 折扣类型:百分比折扣优惠券

  • amount: 100

使用限制:

  • 限制使用 X 项:1

使用时:

  • 优惠券 100% 适用于random购物车中的商品(我猜是默认行为)

Desired:

  • 它需要 100% 折扣cheapest购物车中的商品。

通过以下代码,我尝试实现我的目标,不幸的是没有达到预期的结果

function filter_woocommerce_coupon_get_discount_amount( $discount, $discounting_amount, $cart_item, $single, $instance ) { 
    $price_array = array();

    foreach( $cart_item as $item ) {
        echo $item->price;
        if($item->price > 0){
            array_push($price_array, $item->price);
        }
    }

    $lowestPrice = min($price_array);

    if( $lowestPrice < $discount ){
        $discount = $lowestPrice; 
    }

    return $discount; 
}    
add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_woocommerce_coupon_get_discount_amount', 10, 5 );

首先,您的代码中有一个很大的错误$cart_item变量钩子参数是当前购物车商品,但不是购物车商品数组...

以下将对最便宜的购物车商品应用 100% 的优惠券折扣(注释代码):

add_filter( 'woocommerce_coupon_get_discount_amount', 'filter_wc_coupon_get_discount_amount', 10, 5 );
function filter_wc_coupon_get_discount_amount( $discount_amount, $discounting_amount, $cart_item, $single, $coupon ) { 
    // Define below your existing coupon code
    $coupon_code = 'BOGOF';

    // Only for a defined coupon code
    if( strtolower( $coupon_code ) !== $coupon->get_code() ) 
        return $discount_amount;

    $items_prices = [];
    $items_count  = 0;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $key => $item ){
        // Get the cart item price (the product price)
        if ( wc_prices_include_tax() ) {
            $price = wc_get_price_including_tax( $item['data'] );
        } else {
            $price = wc_get_price_excluding_tax( $item['data'] );
        }

        if ( $price > 0 ){
            $items_prices[$key] = $price;
            $items_count       += $item['quantity'];
        }
    }

    // Only when there is more than one item in cart
    if ( $items_count > 1 ) {
        asort($items_prices);  // Sorting prices from lowest to highest

        $item_keys = array_keys($items_prices);
        $item_key  = reset($item_keys); // Get current cart item key

        // Targeting only the current cart item that has the lowest price
        if ( $cart_item['key'] == $item_key ) {
            return reset($items_prices); // return the lowest item price as a discount
        }
    } else {
        return 0;
    }
}

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

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

对 WooCommerce 中最便宜的购物车商品应用 100% 优惠券折扣 的相关文章

  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 优雅地处理没有数据的 amcharts

    我想知道我的 dataProvider 是否为空 amCharts绘制时默认为null 我怎样才能动态地处理它 var chart AmCharts makeChart chartdiv theme none type serial dat
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 在 PHP 中使用 phpseclib 时出现 RSA 问题

    我正在尝试在 phpseclib 中使用 RSA 实现 我认为在函数中执行一次代码并重新使用该函数会更容易 当我尝试向代码发送短信时 我收到一条错误消息 提示 解密错误 测试还让我意识到每次代码运行时密文都是不同的 所以我显然在那里做错了什
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • 带有模拟的 Angular 2 TestBed

    我正在尝试测试使用其他服务的组件 我想通过为服务提供模拟来隔离组件 在 RC5 之前我可以简单地使用addproviders现在已弃用 并将在下一个 RC 中删除 相反 我必须使用TestBed 当我出于某种原因提供模拟角度时 请继续寻找模
  • 如何以编程方式测试路径/文件是否是快捷方式?

    我需要测试文件是否是快捷方式 我仍在尝试弄清楚如何设置内容 但我可能只有它的路径 我可能只有文件的实际内容 作为字节 或者我可能两者都有 一些复杂的情况包括它可能位于 zip 文件中 在这种情况下 路径将是内部路径 可以使用 SHELL32
  • 在 OS X 上设置区域设置会导致崩溃

    以下代码在 Linux 上运行良好 但在 OS X 10 7 上引发异常 include
  • 如何启动所有安卓厂商的电源管理器以启用后台和推送通知?

    由于制造商进行了自定义 Android 调整 某些 Android 设备在电源管理方面存在一些政治因素 从而破坏了推送通知等某些功能 华为 仅限 EMUI 5 0 Android 7 之前版本 前往 设置 gt 受保护的应用程序 检查您的应
  • bash/Makefile 中的双美元符号是什么意思?

    当在 Makefile 中插入 shell 脚本时 我们 使用双美元符号 来引用变量 为什么会这样 for number in 1 2 3 4 do echo number done As per gnu make 官方文档 配方中的变量和
  • 错误消息“错误:程序中存在杂散‘\302’”

    我在用着代码 块 on Ubuntu 10 10 特立独行的猫鼬 我已连接 Mac 键盘并将键盘设置设置为 瑞士德语 Mac 现在 每当我写一个等号 后跟一个空格 例如宽度 100 时 我都会收到错误消息 程序中出现杂散 302 我知道这个
  • MessageDlg 显示信息图标而不是确认

    在 Win 7 上 MessageDlg 显示信息图标而不是确认图标 问号 这是代码 MessageDlg Are you sure you want to delete this file CRLF FileName mtConfirma
  • 同时使用 JSR-303 和传统 Bean 验证?

    是否可以同时使用JSR 303 bean 验证 and 传统验证 该类型的单个验证器类 在 Spring 中 如果是这样 需要什么配置来设置它 我已经尝试过上面的说明参考 InitBinder protected void initBind
  • jsSHA、CryptoJS 和 OpenSSL 库给出不同的结果

    作为 JS 新手 我也在学习使用加密库 我不明白为什么使用相同的秘密对相同的消息进行签名 编码会产生不同的结果 我在用着jsSHA 1 3 1 在这里找到 and 这里描述了 CryptoJS 3 0 2尝试创建 Base64 sha 1
  • 如何检测 read.csv 的正确编码?

    我有这个文件 http b7hq6v alterupload com en 我想用 R 来读取它read csv 但我无法检测到正确的编码 好像是UTF 8的一种 我在 WindowsXP 计算机上使用 R 2 12 1 有帮助吗 首先基于
  • 全局变量 - 数据库连接?

    我试图连接到数据库 MySQLi 一次 但这样做时遇到问题 如何为整个脚本建立全局连接 有多个文件 index php classes config class php classes admin class php 等 我尝试过以下方法
  • 如何从 Android 应用程序发推文?

    我正在开发一个 Android 应用程序 并且希望具有在我的 Twitter 帐户 TWEET 上发送消息的功能 哪些 API 可用于此目的 代码示例将不胜感激 如果您只需要发送推文 这可以帮助您 String tweetUrl https
  • 任何 concurrent.futures 超时确实有效吗?

    尝试以便宜的方式编写基于进程的超时 同步 如下所示 from concurrent futures import ProcessPoolExecutor def call with timeout func args timeout 3 w
  • 如何使用 Google Drive API 一次删除多个文件

    我正在开发一个 python 脚本 它将文件上传到我的驱动器中的特定文件夹 我注意到 驱动器 api 为此提供了一个很好的实现 但我确实遇到了一个问题 如何一次删除多个文件 我尝试从驱动器中获取我想要的文件并组织它们的 ID 但没有运气 下
  • 当我有很多记录时,Postgres 函数返回一条记录?

    我有很多记录 我的简单查询返回 但当我使用函数时 它只给我第一条记录 首先我使用以下方法创建自己的数据类型 CREATE TYPE my type usr id integer name varchar 30 我的功能是 CREATE OR
  • PowerMockito:使用匹配器模拟静态方法时出现 InvalidUseOfMatchersException

    当我测试这个静态方法时 public class SomeClass public static long someMethod Map map String string Long l Log log with import org ap
  • 将文件保存到选定的目录中(javascript)

    你好 我的问题是关于javascript的 我想要1 要求用户选择一个目录2 然后将我的一堆文件写入其中 可能通过创建子目录 而不与用户交互 我怎样才能做到这一点 我可以吗 我是 javascript 新手 希望得到您的帮助 PS 我听说过
  • 如何使用 Jest 模拟封装在服务类中的 Winston 记录器实例

    我想嘲笑温斯顿记录器封装在使用 NestJS 创建的服务类中的实例 我在下面包含了我的代码 我无法从服务类中触发模拟的记录器实例 谁能解释我哪里出了问题 import as winston from winston import logge
  • Python 翻译多个字符

    我正在尝试在 python 3 3 3 中创建一个程序 它将接受一个字符串 然后将其转换为数字 1 26 我知道如何计算一位数字 但不知道如何计算 2 位数字 translist str maketrans 123456789 ABCDEF
  • 对 WooCommerce 中最便宜的购物车商品应用 100% 优惠券折扣

    我创建了一个 BOGOF 买一送一 优惠券 使用正常的 woocommerce 优惠券方法 该优惠券为用户提供购物车中其他 1 件商品 100 的折扣 优惠券设置 General 折扣类型 百分比折扣优惠券 amount 100 使用限制