WooCommerce 购物车基于数量的折扣

2024-04-13

在 WooCommerce 中,如何根据购物车中的商品总数设置购物车折扣?

例如:

  • 1 至 4 件商品 - 无折扣
  • 5 至 10 件 - 5%
  • 11 至 15 件 - 10%
  • 16 至 20 件商品 - 15%
  • 21 至 25 件商品 - 20%
  • 26 至 30 件商品 - 25%

我搜索过互联网但没有找到任何可用的解决方案或插件。

Thanks.


您可以使用负购物车费用来获得折扣。然后,您将添加条件和计算到挂钩的自定义函数中woocommerce_cart_calculate_fees动作挂钩,这样:

## Tested and works on WooCommerce 2.6.x and 3.0+
add_action( 'woocommerce_cart_calculate_fees','wc_cart_quantity_discount', 10, 1 );
function wc_cart_quantity_discount( $cart_object ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    ## -------------- DEFINIG VARIABLES ------------- ##
    $discount = 0;
    $cart_item_count = $cart_object->get_cart_contents_count();
    $cart_total_excl_tax = $cart_object->subtotal_ex_tax;

    ## ----------- CONDITIONAL PERCENTAGE ----------- ##
    if( $cart_item_count <= 4 )
        $percent = 0;
    elseif( $cart_item_count >= 5 && $cart_item_count <= 10 )
        $percent = 5;
    elseif( $cart_item_count > 10 && $cart_item_count <= 15 )
        $percent = 10;
    elseif( $cart_item_count > 15 && $cart_item_count <= 20 )
        $percent = 15;
    elseif( $cart_item_count > 20 && $cart_item_count <= 25 )
        $percent = 20;
    elseif( $cart_item_count > 25 )
        $percent = 25;


    ## ------------------ CALCULATION ---------------- ##
    $discount -= ($cart_total_excl_tax / 100) * $percent;

    ## ----  APPLYING CALCULATED DISCOUNT TAXABLE ---- ##
    if( $percent > 0 )
        $cart_object->add_fee( __( "Quantity discount $percent%", "woocommerce" ), $discount, true);
}

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

已在 WooCommerce 2.6.x 和 3.0+ 上测试并运行

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

WooCommerce 购物车基于数量的折扣 的相关文章

  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 为什么我不能在 TCPDF 表中使用 č,ć,đ 图表?

    我正在为我的网站构建一个 tcpdf 文件 该 tcpdf 文件中有一个包含一些数据的表格 但我无法使该章程正常工作 对于编码 我使用 windows 1250 宪章女巫不起作用 我已经尝试过 utf 8 但仍然没有得到这个章程 tcpdf
  • Smarty输出空白页

    已解决 模板文件错误 我有这样的 Smarty 设置 require once smarty Smarty class php smarty new Smarty smarty gt compile dir compile dir smar
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • 如何解决此错误:属性 rel 的原始源值错误

    我正在尝试使用 w3c 验证我的网站 但出现错误 Bad value original source for attribute rel on element link The string original source is not a
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • SMTP 配置在生产中不起作用

    我正在尝试在提交表单时发送电子邮件 我正在使用 PHPMailer 使用以下配置发送邮件 mail new PHPMailer mail gt isSMTP mail gt Host mail example in mail gt Port
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 在字符串中间添加一个字符

    可能有一个简单的解决方案可以解决这个问题 但会引起面部表情 我将时间存储为 4 个字符长的字符串 即 1300 我试图将该字符串显示为 13 00 我觉得必须有一个比我现在正在做的更优雅的解决方案 我目前有 startTime get fi
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • 将 Google 信任徽章添加到 Magento

    我正在尝试将 Google Trust Badge 添加到我的 magento 商店 我尝试在 Magento 网站上搜索扩展程序 但找不到 我是否需要将以下代码粘贴到产品和结账页面 还是必须对其进行更改 如果有人能引导我走向正确的方向 我
  • 使用php将数据存储到文本文件中?

    我正在尝试将数据存储在文本文件中 例如使用 php 将数组存储到文本文件中 而不是存储到 mysql 数据库中 例如 这里是要存储在文本文件中的数据 name gt john age gt 25 location gt australia
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • 检查条件并通过 Zend 中的 Regex 识别 url 中的模式

    我正在实现 Zend Regex 路由 并且必须对 url 执行多次检查 例如 如果这是我的网址 http localhost application public index php module controller action 这是
  • 从支付网关重定向回时用户会话丢失

    我已将 Cyber source 配置为我的支付网关 我能够导航到 cybersource 并进行付款 并能够成功重定向回该网站 我也可以取消付款并重定向回我的网站 我收到来自支付网关的响应 但是 用户在从支付网关重定向回来时会被注销 我正
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http

随机推荐

  • 与 UltraHD 兼容的 CHtmlView

    CHtmlView与 UltraHD 分辨率不兼容 实现 UltraHD 感知并不仅仅在于使用正确的 HTML CSS 打印预览机制失败并裁剪页面 许多个月前 微软承认这是一个问题 但没有解决它 我的应用程序大量使用CHtmlView用于显
  • 具有参数化脚本块的 PowerShell 函数

    我想创建一个枚举一些数据的 PowerShell 函数 并在所有出现的情况下触发脚本块 现在我已经 这不是实际的代码 但它说明了我的问题 function Invoke TenTimes CmdletBinding param Parame
  • discord.py send_message 用法

    我已经开始致力于一个项目来加速我对 python 的学习 我正在尝试重新创建一个我经常使用的不和谐机器人 因为我已经习惯了它的功能 下面是我当前的代码 import discord from discord import User from
  • 使用 Visual Studio 在线构建定义构建 SSIS 解决方案....dtproj 不受 MSBuild 支持,无法构建

    我通过 Visual Studio Online 创建了一个构建定义 用于构建 SSIS 项目 dtproj 构建似乎成功 但出现一条警告 指出 MSBuild 不支持 dtproj 无法构建 SSDT已安装在构建服务器上 有谁知道为什么会
  • Flask-后退按钮即使在注销后也会返回到会话

    我正在使用 Flask 创建一个需要登录和注销的网站 我正在使用 Flask Security 来帮助解决这个问题 我的问题是 注销后 如果点击后退按钮 我将返回到用户页面 有没有办法防止在退出后按 Flask 中的后退按钮返回会话 您可以
  • 通过Java运行cmd命令

    我发现了几个通过 Java 类运行 cmd 命令的代码片段 但我无法理解它 这是打开cmd的代码 public void excCommand String new dir Runtime rt Runtime getRuntime try
  • 当飞行模式打开时 CLLocationManager 如何获取位置

    我的应用程序使用 CLLocationManager 从设备获取位置更新 我曾假设当设备处于飞行模式时 我不会获得位置更新 但是我愿意 我之所以这么认为 是因为 Apple 表示飞行模式会关闭 Wifi 蜂窝网络 蓝牙和 GPS 看 htt
  • response.authResponse 为 null

    我编写了以下代码来检查 facebook 的登录状态 FB getLoginStatus function response if response status connected var user id response authRes
  • 为什么 XmlNodeList 是一次性的?

    我找不到这个问题的答案 只是出于好奇 为什么XmlNodeList 类 http msdn microsoft com en us library system xml xmlnodelist 28v vs 110 29 aspx在 NET
  • 如何使用 MsDeploy 设置 iisApp Provider 的部署路径?

    我正在为我的 Web 应用程序创建 Web 部署包 zip 文件 我发现我可以通过在打包站点期间包含 pubxml 并在构建期间使用 PublishProfile 属性来指定该配置文件来指定应用程序的站点名称 pubxml 有
  • 在 Vala 中使用 Glib.Settings 时如何处理错误?

    我在 Vala 应用程序中使用 Glib Settings 我想确保即使架构或密钥不可用 我的程序也能正常工作 所以我添加了一个 try catch 块 但是如果我使用不存在的密钥 程序就会出现段错误 据我了解 它甚至没有到达 catch
  • 层次结构中具有可选元素的 XPath

    正如在这个堆栈溢出答案 https stackoverflow com questions 4608097 xpath to select a table row that has a cell containing specified t
  • TSQL 选择一行或多行进行连接

    这是类似于以下的问题 TSQL 按 2 个条件之一选择行 https stackoverflow com questions 10208849 tsql select rows by one from 2 conditions 但结果与我想
  • Java:如何创建 HTTP 浏览会话

    我正在尝试创建一个向服务器发送一些 POST 请求的 Java 应用程序 第一个请求是带有身份验证信息的请求 然后 当我发送下一个请求时 我得到的答案是我的会话已过期 但我在同一秒内发送下一个请求 所以它不能超时 所以我猜想 Java 中有
  • Twitter PHP API 应用程序访问直接消息权限?

    I have set my application permissions as read Write Direct Messages as shown in the figure 我已经保存了这些设置 But when i authent
  • 如何下载并安装 lint?

    有谁知道如何获取 Mac Windows 和 Linux 的 lint sudo port install lint找不到它 我只见过 BSD 的 lint 有splint http www splint org 但是 GPL lint 重
  • 如何列出Excel中三列中值的所有可能组合?

    我有三列 每一列都有不同类型的主数据 如下所示 现在 我想要这三个单元格的所有可能组合 就像 aa kk jj aa kk ff aa ll jj aa ll ff aa mm jj 这可以用公式来完成吗 我发现一个公式有 2 列 但我无法
  • Prism的RegionManager视图切换性能

    我正在对使用 PRISM 库编写的 WPF 应用程序进行性能分析 在此应用程序中 从一个视图导航到另一视图特别慢 尤其是在远离 重 视图时 注意 来回导航时视图会被缓存并且不会重新构造 PRISM 将所有视图保留在 SingleActive
  • 为什么要有移动语义?

    首先我要说的是 我已经阅读了有关移动语义的许多问题中的一些 这个问题不是关于如何使用移动语义 而是问它的目的是什么 如果我没有记错的话 我不明白为什么需要移动语义 背景 我正在实现一个重磅课程 就这个问题而言 它看起来像这样 class B
  • WooCommerce 购物车基于数量的折扣

    在 WooCommerce 中 如何根据购物车中的商品总数设置购物车折扣 例如 1 至 4 件商品 无折扣 5 至 10 件 5 11 至 15 件 10 16 至 20 件商品 15 21 至 25 件商品 20 26 至 30 件商品