根据 WooCommerce 中的总额自动应用百分比或固定购物车折扣

2023-12-09

我正在尝试在客户的 WooCommerce 网站上设置优惠券,以便在购物车总数低于上限金额或固定金额等于或大于上限金额时应用百分比折扣。

假设购物车总数的上限为 200。如果购物车总数低于此上限,则应用 10% 的折扣。但如果购物车总数为 200 件或更多,则固定金额 20 件将用作折扣。

例如:

  • 我的购物车总数为 190。由于这小于上限 200,因此折扣金额计算为 10%,即应用 19
  • 我的购物车总数为 210。由于这大于 200 的上限,因此应用固定数量 20。

如何将我的 WooCommerce 设置为根据总额应用百分比折扣或固定购物车?


您可以使用挂钩的自定义函数woocommerce_before_calculate_totals操作挂钩,您将在其中定义 2 个优惠券代码:

  • 百分比折扣优惠券代码(10%)
  • 固定金额折扣优惠券代码(20 美元)

代码:

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

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

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

    // HERE define your coupon code
    $coupon_percent = 'uget10percent'; # <===  <===  <===  <===  <===  <===
    $coupon_fixed = 'uget20off'; # <===  <===  <===  <===  <===  <===  <===

    // Get cart subtotal
    $subtotal = 0;
    foreach($cart->get_cart() as $cart_item ){
        $subtotal += $cart_item['line_subtotal'];
        $subtotal += $cart_item['line_subtotal_tax']; // with taxes
    }

    // Coupon type "percent" (less than 200)
    if( $subtotal < 200 && ! $cart->has_discount( $coupon_percent ) ){
        // If coupon "fixed amount" type is in cart we remove it
        if( $cart->has_discount( $coupon_fixed ) )
            $cart->remove_coupon( $coupon_fixed );

        // Apply the "percent" type coupon code
        $cart->add_discount( $coupon_percent );
    }
    // Coupon type "fixed amount" (Up to 200)
    elseif( $subtotal >= 200 && ! $cart->has_discount( $coupon_fixed ) ) {
        // If coupon "percent" type is in cart we remove it
        if( $cart->has_discount( $coupon_percent ) )
            $cart->remove_coupon( $coupon_percent );

        // Apply the "fixed amount" type coupon code
        $cart->add_discount( $coupon_fixed );
    }
}

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

经过测试并有效。

如果您想将其应用于小计不含税你必须评论这一行:

$subtotal += $cart_item['line_subtotal_tax']; // with taxes

或者您也可以使用负费用(即折扣)来代替优惠券:

add_action( 'woocommerce_cart_calculate_fees', 'discount_based_on_total', 25, 1 );
function discount_based_on_total( $cart ) {

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

    $total = $cart->cart_contents_total;

    // Percentage discount (10%)
    if( $total < 200 )
        $discount = $total * 0.1;
    // Fixed amount discount ($20)
    else
        $discount = 20;

    // Add the discount
    $cart->add_fee( __('discount', 'woocommerce'), -$discount );
}

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

经过测试并有效。

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

根据 WooCommerce 中的总额自动应用百分比或固定购物车折扣 的相关文章

随机推荐

  • 使用可变模板参数构建枚举

    我有一个相当简单的变体类 它支持一组预定义的类型 并提供一个枚举来指示哪些可用类型当前处于活动状态 像这样的事情 class variant enum class type integer real string etc type acti
  • Eclipse 2023-06 突然不再自动完成“sysout”

    虽然我认识到这个问题之前已经被问过 但我尝试了多个不同线程的解决方案 但到目前为止还没有解决方案 5 天前 当我使用 Eclipse 时 我没有任何问题 现在到今天我突然无法使用 ctrl space 自动完成 sysout 据我所知 Ec
  • 在 C 中将数组作为参数传递

    我 认为我 明白 如果数组是在编译时在堆栈上声明的 则只能检索数组的大小 使用 sizeof 例如 int my array 1 2 3 sizeof my array 3 一旦你开始使用指针 你就会失去这个长度信息 例如如果将 int 指
  • 如何在 Spring RestTemplate 中使用以 JSON 表示的查询参数?

    我需要使用 Spring RestTemplate 向具有表示为 JSON 的查询参数的 HTTP 端点发出请求 restTemplate getForObject apiRoot path object myObject Response
  • 当 DateTime 字段为 null 时,LINQ 中“指定的转换无效”

    我遇到问题了 我的代码使用 LINQ var resultCases from row2 in dtCases AsEnumerable where row2 Field
  • PHP 线程应该如何存储其数据?

    所以我一直在网上搜索和阅读有关 PHP pthreads3 以及它们应该如何存储数据的信息 或者更确切地说 他们不是 在我看来 线程正确存储其数据的唯一方法是创建一个新的 Threaded 对象并将其发送到线程 然后 线程可以使用此 Thr
  • UINavigationController 不弹出 UINavigationBar 项目

    我遇到一个问题 当 UINavigationController 弹出视图控制器时 我的 UINavigationBar 没有弹出它的项目 我查看了堆栈 观察到以下内容 分配的导航控制器的预期数量 在仪器中检查 堆栈上有正确数量的控制器 调
  • 如何在选中复选框的情况下克隆第一个框中的每个输入的输入?

    我想将每列的第一个输入的类型克隆 复制到同一类 id 的子框中 例如 有 5 列数据 每列都有自己的类和特定 ID 一旦我开始在每列的顶部输入上输入并选中复选框 该列的后续 子输入开始键入相同的笔划 JS var input1 docume
  • 由于twisted-iocpsupport,将 Django 应用程序部署到 Heroku 时出现问题

    我正在尝试将我制作的 Django 应用程序部署到 Heroku 上 最终弄清楚如何将其推送到 git 后 我 尝试这样做 git push heroku master 但随后它无法推送 因为它无法构建 twisted iocpsuppor
  • nginx 错误连接到 php5-fpm.sock 失败(13:权限被拒绝)

    我将 nginx 更新为1 4 7和 PHP 到5 5 12 之后我得到了502错误 在我更新之前一切正常 nginx 错误 log 2014 05 03 13 27 41 crit 4202 0 1 connect to unix var
  • Gprof:特定功能时间[重复]

    这个问题在这里已经有答案了 我想找出程序中特定函数所花费的时间 为此 我正在使用 gprof 我使用以下命令来获取特定函数的时间 但日志文件仍然显示程序中存在的所有函数的结果 请在这方面帮助我 gprof F FunctionName Ex
  • LoadLibrary:找不到指定的程序

    我需要在 Windows 2003 服务器中提取一些有关系统进程的信息 是的 在 2019 年 我用 python 编写了该代码 并使用auto py to exe 当我运行 exe文件在服务器上 我收到一条错误消息 LoadLibrary
  • 如何在 Eclipse 中使用 glassfish 适配器进行热部署

    有没有人获得 glassfish v3 适配器来与 Eclipse 一起使用 而无需每次代码更改时都重新启动 我尝试进行设置 但每次我更改任何文件时适配器都会 重新发布 这非常烦人 最多需要 3 分钟 并且会锁定我的机器一秒钟 我必须记住在
  • 批处理文件:在FOR循环中跳过以_开头的文件夹

    我想排除所有以 无需在排除文本文件中列出每个配置文件 是否有可能做到这一点 echo off set Target D backup for f tokens I in dir a d h b SystemDrive Users do if
  • 通过简单的适配器在imageview中显示位图图像

    我从网址获取图像 我在列表视图中使用图像视图 我想将位图图像列表添加到列表项的每一行中 我使用 SimpleAdapter 但图像视图显示空白 我的代码如下 ArrayList
  • 使用 c-driver 按索引更新 mongo 数组元素

    为了更新 mongo 数组的元素 我使用了如下语法 set a 0 1238 a 1 402 或者 更准确地说 我正在使用我认为与其等效的 C 驱动程序函数调用 这似乎工作正常 但是当我查看 MongoHub 中的对象时 我看到 a 0 1
  • Python - Pandas 用字符串删除行

    在我的数据集中 我有几行包含字符 我只需要包含所有整数的行 最好的方法是什么 以下数据集 例如 我想删除第 2 行和第 3 行 因为它们分别包含 051A 04A 和 08B 1 2017 0 321 3 20 42 18 2 051A 0
  • 如何编写 PostSharp Invoke 方面来简化跨线程控制更新

    当我想跨线程更新控件时 我通常会这样做 this Invoke MethodInvoker delegate SomeProcedure 建议的方法实际上是调用要更新的特定控件的调用程序 但 99 的情况下 表单 即我的示例中的 this
  • Python 中的 OpenCV:“ImportError:DLL 加载失败”

    关于这个主题已经有很多问题了 但我没有找到关于 DLL not found 传统问题的任何令人满意的答案 我使用的是通过 Anaconda 3 安装的 Python 3 5 我已经用 pip 安装了 官方 opencv python 3 2
  • 根据 WooCommerce 中的总额自动应用百分比或固定购物车折扣

    我正在尝试在客户的 WooCommerce 网站上设置优惠券 以便在购物车总数低于上限金额或固定金额等于或大于上限金额时应用百分比折扣 假设购物车总数的上限为 200 如果购物车总数低于此上限 则应用 10 的折扣 但如果购物车总数为 20