根据商品数量有条件地按购物车商品添加折扣

2023-12-24

我已经建立了一个 Woocommerce 商店,并希望为所有产品设置基于 12 倍数(一盒)的特定折扣。我尝试了很多折扣插件,但没有找到我想要的。

例如,如果我订购 12 件产品 X,我将获得 10% 的折扣。如果我订购 15 件产品 X,前 12 件我可以享受 10% 的折扣,后 3 件是全价。如果我订购 24 件,则 10% 的折扣适用于所有 24 件产品 X。

我发现的最接近的是:根据产品总数对某些类别进行折扣 https://stackoverflow.com/questions/40871142/discount-for-certain-category-based-on-total-number-of-products/40899247#40899247

但这最后会作为折扣(实际上是负费用)应用,我想在产品旁边的购物车中显示折扣,就像正常折扣一样。

如果产品已经在打折,我还需要禁用此折扣。

Thanks.


此代码在 Woocommerce 3+ 中不起作用

See: Woocommerce 3 中基于数量的购物车商品折扣 https://stackoverflow.com/questions/52010505/cart-item-discount-based-on-quantity-in-woocommerce-3/52012795#52012795:

是的,这也是可能的,为每个购物车项目进行自定义计算并单独替换其价格(符合您的条件和计算),使用挂钩的自定义函数woocommerce_before_calculate_totals动作挂钩。

这是代码:

add_action( 'woocommerce_before_calculate_totals', 'custom_discounted_cart_item_price', 10, 1 );
function custom_discounted_cart_item_price( $cart_object ) {

    $discount_applied = false;

    // Set Here your targeted quantity discount
    $t_qty = 12;

    // Iterating through each item in cart
    foreach ( $cart_object->get_cart() as $item_values ) {

        ##  Get cart item data
        $item_id = $item_values['data']->id; // Product ID
        $item_qty = $item_values['quantity']; // Item quantity
        $original_price = $item_values['data']->price; // Product original price

        // Getting the object
        $product = new WC_Product( $item_id );


        // CALCULATION FOR EACH ITEM 
        // when quantity is up to the targetted quantity and product is not on sale
        if( $item_qty >= $t_qty && !$product->is_on_sale() ){
            for($j = $t_qty, $loops = 0; $j <= $item_qty; $j += $t_qty, $loops++);

            $modulo_qty = $item_qty % $t_qty; // The remaining non discounted items

            $item_discounted_price = $original_price * 0.9; // Discount of 10 percent

            $total_discounted_items_price = $loops * $t_qty * $item_discounted_price;

            $total_normal_items_price = $modulo_qty * $original_price;

            // Calculating the new item price
            $new_item_price = ($total_discounted_items_price + $total_normal_items_price) / $item_qty;


            // Setting the new price item
            $item_values['data']->price = $new_item_price;

            $discount_applied = true;
        }
    }
    // Optionally display a message for that discount
    if ( $discount_applied )
        wc_add_notice( __( 'A quantity discount has been applied on some cart items.', 'my_theme_slug' ), 'success' );
}

这正是您对购物车中每件商品分别期望的折扣(基于其数量)不适用于正在销售的商品。但您不会在购物车的订单项中获得任何指示折扣的标签(文本)。

(可选)当折扣应用于某些购物车商品时,我会显示一条通知...

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

这段代码已经过测试并且可以工作。

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

根据商品数量有条件地按购物车商品添加折扣 的相关文章

  • Azure 上的“phpcomposer.phar install”出现“无法终止进程”错误

    我正在尝试将我的 Symfony 2 应用程序部署到 Microsoft Azure 网站云 为此 我按照本指南中的步骤操作http symfony com doc current cookbook deployment azure web
  • 将 MySQL 结果作为 PHP 数组

    mysql 表 config name config value allow autologin 1 allow md5 0 当前的 php 代码 sth mysql query SELECT rows array while r mysq
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • 在 PHP 中模拟 jQuery.ajax 请求

    我必须在 PHP 中模拟 AJAX 请求 就像在 jQuery 中一样 我当前的代码在这里 原始 AJAX 调用 不得修改 ajax type POST url someFile php data data success function
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • PHP - 扩展 __construct

    我想知道你是否可以帮助我 我有两个类 一个扩展了另一个 B 类将由各种不同的对象扩展 并用于常见的数据库交互 现在我希望 B 类能够处理其连接和断开连接 而无需来自 A 类或任何外部输入的指示 据我了解 问题是扩展类不会自动运行其 cons
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • 模拟/存根在 PHPUnit 中实现 arrayaccess 的类的对象

    这是我正在为其编写测试套件的类的构造函数 它扩展了 mysqli function construct Config c store config file this gt config c do mysqli constructor pa
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • 如何让Gmail像加载进度条一样

    我想在页面的中心和顶部创建一个像 Gmail 一样的加载进度条 并适用于所有浏览器 这是基本代码
  • Windows iis 7.0 上的 APC 不稳定

    我的 IIS 非常不稳定 因为它总是由于某种与 APC 相关的原因而重新启动 服务器的规格如下 Intel R Xeon CPU 3GHZ 3GHZ 2GB RAM 64bit APC 和服务器规格 3 1 7 dev PHP Versio
  • phpinfo 说 php.ini 路径是 C:\Windows 但那里没有 php.ini

    我们正在尝试从 PHP5 切换到 PHP7 现在我们已经安装了 Apache 并且 PHP 可以运行了 然而 我们在php ini文件没有任何作用 Via phpinfo 我们意识到原因是Configuration File php ini
  • 将按钮文本放在一行上

    我的按钮文本在 safari 中显示在一行上 即使在初次单击后 但是在 google chrome 上 当您第一次到达该按 钮时 我的按钮将显示在一行上 但是当您浏览更多帖子并再次遇到 加载更多 按钮时 文本搞砸了 这只发生在谷歌浏览器上
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • 接口中的构造方法

    接口中的构造方法不好吗 为什么人们认为有人想要实例化接口 我们想要做的是强制实现者实现构造函数 就像其他接口方法一样 接口就像一个合同 假设我有一个接口 Queue 并且我想确保实现者创建一个带有一个参数的构造函数 该构造函数创建一个单例队
  • PHP 中的多个插入查询[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个 php html 表单 它将结果插入到狗展数据库中 问题是 无论我做什么 我都会收到此错误 查询失败 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 INSE
  • 合并 url 中的 2 个输入值

    我有这样的形式
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时

随机推荐

  • Java - 编辑现有的 JSON 文件

    嘿 我想知道是否可以编辑现有的 json 我知道位置 假设位置是 C Something json 那我该如何编辑呢 Thanks 如果你想编辑复杂的 JSON 结构 我建议使用GSON https code google com p go
  • jquery 使用绑定与点击

    我遇到过几种在 jquery 中处理点击事件的方法 bind mydiv bind click function click mydiv click function on mydiv on click function 两个问题 他们还有
  • Stripe Checkout https://checkout.stripe.com/checkout.js 和 Elements https://js.stripe.com/v3/ 之间的区别

    我正在使用条纹支付与我的系统集成 但我不明白这两个库之间的区别 似乎使用 javascript 生成表单并将令牌传递到我们的服务器端
  • 为什么全局描述符表的第一个段描述符仅包含零?

    在我见过的许多教程中 第一个段选择器仅包含零 后面是代码和数据段 例如 lgdt gdt descriptor More code gdt start gdt null long 0x0 long 0x0 More descriptors
  • Angular 2 RC4 中的形式

    我正在尝试 Angular 2 RC4 中的表单 一切正常 但是当我启动应用程序时 浏览器控制台向我显示以下消息 It looks like you re using the old forms module This will be op
  • Gradle:复制子项目资源

    我有一个项目 其中包含一些我正在使用 Gradle 的子项目 我想做的是将资源从子项目A复制到主子项目B 我的结构看起来像这样 Application subprojectA src main resources blah subproje
  • 如果没有连接,Android WebView 不会加载缓存的网站

    我正在尝试缓存 WebView 中加载的网站 但如果网络连接关闭 我将无法使其工作 Cachdirectory 已创建 缓存文件就在那里 已授予权限 我加载网页然后关闭网络 也给出了 WI FI 权限 当我尝试重新加载页面时出现错误 现在应
  • 填充中的排序不起作用(猫鼬)

    我的MongoDB版本是3 2 mongoose版本是4 6 0 这些是我的架构 chat const chatSchema new mongoose Schema users type mongoose Schema Types Obje
  • 在 DirectX 中显示视频

    在使用 XAudio2 和 Direct3D9 10 的应用程序中显示视频 带声音 的最佳 最简单方法是什么 至少它需要能够传输可能更大的视频 并考虑到窗口宽高比可能与视频不同的事实 例如通过添加信箱 尽管理想情况下我希望能够将视频嵌入到3
  • Macroable.php 第 74 行中的 BadMethodCallException:方法控制器不存在

    当我遵循路线控制器时 我遇到了一些问题 Web php代码 Route controller admin adminController adminController php代码
  • VS Code Python 等待调试器连接超时

    昨天 在 Visual Studio Code 自我更新 从 1 27 2 到 1 28 2 之前 我可以在激活特定环境并调试脚本后从 anaconda 提示符中打开它 现在 当我尝试调试脚本时 收到有关等待调试器连接超时的错误 我遵循了另
  • 如何使 DIV 部分可点击?

    我编写了一个网页 其中的链接都包含在它们自己的标签中 我还使用 CSS 边框 背景颜色 填充 将它们设置为所有按钮样式 如何让整个 DIV 被点击来激活链接 实现这种效果 使链接像按钮一样 的最佳方法是将 css 应用到链接本身 这是一个基
  • 回收位图异常

    我收到这个异常 异常 java lang IllegalStateException 无法复制回收的位图 我的代码是 int width bitmap getWidth int height bitmap getHeight int new
  • 如何在子测试中访问 Jest 测试环境的类属性?

    我已经为jest创建了一个测试环境 它非常接近于他们的官方文档 https jestjs io docs en configuration testenvironment string 我在构造函数中设置了一些值 我希望将它们提供给环境中使
  • Android 跳过 WebView 焦点并使用 TalkBack 直接进入内容

    我的 Android 应用程序中有一个 WebView 但启用 TalkBack 后 它会聚焦于整个视图 用户必须滑动到下一个项目才能开始听到 WebView 内容 有没有办法跳过WebView的选择并直接跳到选择内容 在尝试之后我不这么认
  • 基于控制器操作的 Rails 条件(“if”)语句

    可能有更好的方法来做到这一点 但我试图在控制器中基于当前操作在 Rails 中创建一个 if 语句 这将在视图中使用 例如 如果它是编辑页面或显示页面等 我想要不同的样式 是否有 if 语句可以指定这一点 我需要一个 if 语句 因为它在多
  • Liquibase + Postgresql + Spring Jpa:Id 自动递增问题

    我在实体中有以下描述 Id GeneratedValue strategy GenerationType IDENTITY private Long id 用于生成此 id 的 Liquibase 指令如下
  • 通过 Flask 将串行数据传递给 javascript

    我一直在研究将数据从 Flask 推送到 Javascript 主要是通过修改此处找到的代码 https github com clebio flask d3 https github com clebio flask d3 现在我尝试从
  • Android 中的 ViewPager 滚动问题

    我有一个ViewPager动态数量images在里面 这ViewPager作为自定义行添加到表视图中 由于此表视图可以有多个动态自定义行 因此我必须在scrollview用于滚动 现在我的问题是 当我水平滚动到 查看寻呼机 时 它并不完全是
  • 根据商品数量有条件地按购物车商品添加折扣

    我已经建立了一个 Woocommerce 商店 并希望为所有产品设置基于 12 倍数 一盒 的特定折扣 我尝试了很多折扣插件 但没有找到我想要的 例如 如果我订购 12 件产品 X 我将获得 10 的折扣 如果我订购 15 件产品 X 前