以编程方式将优惠券应用于 WooCommerce3 中的订单

2024-02-05

我正在开发一个插件,可以直接创建订单(无购物车)并应用优惠券。在 woo API 3.0 版本中,该函数add_coupon()已被弃用,取而代之的是WC_Order_Item_Coupon您添加到订单中的对象。

创建优惠券

$coupon = new WC_Order_Item_Coupon();
$coupon->set_props(array('code' => $coupon, 'discount' => $discount_total, 
'discount_tax' => 0));
$coupon->save();

这是成功的。我可以通过调用来验证$coupon->get_discount().

然后,我将优惠券添加到订单中并重新计算总数:

$order->add_item($item);
$order->calculate_totals($discount_total);
$order->save(); 

登录 wp-admin 我可以看到带有可见优惠券代码的订单。但是,优惠券对订单项或总计没有影响。

是否误解了 api v3.0 打算如何处理优惠券?


怎么样使用WC_Abstract_Order::apply_coupon?

/**
 * Apply a coupon to the order and recalculate totals.
 *
 * @since 3.2.0
 * @param string|WC_Coupon $raw_coupon Coupon code or object.
 * @return true|WP_Error True if applied, error if not.
 */
public function apply_coupon( $raw_coupon )

这是我的代码。

$user = wp_get_current_user();

$order = new WC_Order();
$order->set_status('completed');
$order->set_customer_id($user->ID);
$order->add_product($product , 1); // This is an existing SIMPLE product
$order->set_currency( get_woocommerce_currency() );
$order->set_prices_include_tax( 'yes' === get_option( 'woocommerce_prices_include_tax' ) );
$order->set_customer_ip_address( WC_Geolocation::get_ip_address() );
$order->set_customer_user_agent( wc_get_user_agent() );
$order->set_address([
    'first_name' => $user->first_name,
    'email'      => $user->user_email,
], 'billing' );
// $order->calculate_totals();  // You don't need this

$order->apply_coupon($coupon_code);

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

以编程方式将优惠券应用于 WooCommerce3 中的订单 的相关文章

随机推荐

  • 为什么这个脚本不能与 python 线程一起使用

    所以我一直在尝试找到一种访问任务管理器的方法 我尝试了一些方法 包括 wmi 模块和 Windows 任务列表 但都不适合我的需要 wmi 太慢了 当我在使用多处理的东西中同时访问它时 任务列表变得太慢了 所以我发现这个脚本工作得很好 但我
  • Flexbox 每行的元素数量相同吗?

    我有动态内容和响应式布局 因此项目数量和可用宽度会有所不同 有时 div 中的元素需要换行到第二个 行 使用 Flexbox 或任何其他 CSS 方法 可以使每行上的项目数相等吗 div class cont div class elem
  • Swift 泛型:比泛型更专业?

    XCode 6 测试版 5 Goal 我正在尝试为语义兼容但不共享 或似乎共享 足够协议的类型编写泛型代码 以使我的泛型基于共享协议的子集 到目前为止 我还没有找到解决方案 并且想知道我错过了一些东西 或者它是否是语言的限制 任何见解都值得
  • JavaScript readAsDataurl 不是一个函数

    在 Gecko Firefox 中我收到错误消息 类型错误 fr readAsDataurl 不是函数 使用以下 JavaScript var fr new FileReader fr readAsDataURL files i 事实证明
  • 无法发送邮件 - javax.net.ssl.SSLException:无法识别的 SSL 消息,纯文本连接?

    我们使用 Spring 发送邮件JavaMailSenderImpl 以下是配置
  • 防止用户在我的服务器上创建多个帐户

    我有一款最初为 PC 编写的游戏 现在正在移植到 ios 这是一款在线多人游戏 需要用户拥有我们的帐户 为此 他们需要在游戏中注册并注册 我们希望尝试阻止同一用户创建大量帐户 如果发生这种情况并不重要 但我们希望减少这种情况 在 PC 上
  • CLLocation 提示一瞬间显示又消失

    在我的应用程序中 我尝试从 GPS 获取经度和纬度 为此 我必须询问用户是否有权访问他的位置 在我这样做之前 我添加到Info plist这两个卢比 Privacy Location When In Use Usage Descriptio
  • 在自定义映射中调用 IMappingEngine.Map

    使用 AutoMapper 当使用 ConvertUsing 为容器类型定义自定义映射时 我经常需要在映射函数内调用 IMappingEngine Map 这是必要的 因为它允许我重用子映射的定义 CreateMap
  • 使用 for 循环按列填充数据框

    我创建了一个包含 11 列和 15 行的空数据框 并随后命名了这些列 L df lt data frame matrix ncol 11 nrow 15 names L df lt paste0 L por 0 10 w lt c 0 2
  • 如何迭代通用函数中传递的切片并集? (T无芯型)

    我正在 go 1 18 中测试泛型并查看了这个example https go dev doc tutorial generics declare type constraint 我想重新创建该示例 但能够传入 int 切片或 float
  • 未为目标“###”提供服务证书 在 ClientCredentials 中指定服务证书

    我已经实现了一个测试客户端 服务器 它实现了UserName通过 WCF 进行消息身份验证 它almost一切顺利 但我在最后一个障碍处摔倒了 我得到一个InvalidOperationException上面写着 未为目标 http loc
  • 使用数组和List<>哪个更好? [复制]

    这个问题在这里已经有答案了 我想知道哪种类型的性能更好以及您认为应该使用哪种类型 例如 我有一个字符串列表 不知道我需要多少个项目 因此使用 Add String 函数非常方便 我可以随时轻松地将新字符串添加到列表中 使用每种方法的优点 缺
  • WiX 安装程序 msi 未安装使用 Visual Studio 2017 创建的 Winform 应用程序

    为了进行简单的测试 我创建了一个Wix简单 Winform 应用程序的安装程序应用程序如下 但是当我运行msi使用安装程序创建 它运行仅一秒钟 然后退出而不安装 Winform 应用程序 Question 这可能是什么问题 我的身上似乎缺少
  • 未指定的隐式对象创建

    Since P0593 为低级对象操作隐式创建对象 https github com cplusplus papers issues 106已被接受 现在可以创建对象隐含地在 C 20 中 具体来说 该提案引入的措辞允许某些操作 例如std
  • SchemaSpy PostgreSQL - 警告 - 连接失败

    我尝试使用 SchemaSpy 连接到我的 PostgresSQL 服务器 我安装了 Java 使用oracle java8 installer from ppa webupd8team java 我的 PostgreSQL 服务器在 Do
  • 捕获 WebService 抛出的 SoapException

    我写了以下服务 namespace WebService1 WebService Namespace http tempuri org WebServiceBinding ConformsTo WsiProfiles BasicProfil
  • Umbraco - 通过 URL 选择节点

    当我尝试通过 URL 访问节点时 我遇到了 Umbraco 问题 我一直在尝试形成一个 xpath 查询来选择 url 但我不知道该怎么做 而且他们的 API 中的所有内容都是 动态的 所以我发现不可能更深入地挖掘其他内容方法 Umbrac
  • 将大视频从 iPhone 上传到网络服务器

    我正在尝试将一个大视频从 iphone 上传到具有 php 脚本的网络服务器 我在用着NSInputStream获取文件视频块 我在每次遍历时创建一个请求 POST void stream NSStream stream handleEve
  • Git Pull 与 Git Rebase

    我是 Git 新手 正在尝试了解两者之间的区别git pull vs git rebase 有人可以提供一个例子 何时使用哪个选项 因为我觉得两者都有相同的目的 git pull and git rebase不可互换 但它们是紧密相连的 g
  • 以编程方式将优惠券应用于 WooCommerce3 中的订单

    我正在开发一个插件 可以直接创建订单 无购物车 并应用优惠券 在 woo API 3 0 版本中 该函数add coupon 已被弃用 取而代之的是WC Order Item Coupon您添加到订单中的对象 创建优惠券 coupon ne