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

标签 php wordpress woocommerce orders coupon

我正在开发一个直接创建订单(无购物车)并应用优惠券的插件。在 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();

关于php - 以编程方式将优惠券应用于 WooCommerce3 中的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48188567/

相关文章:

php - 将 PDF 保存为阿拉伯名称 (PHP)

wordpress - 谷歌云计算实例 + WordPress

php - Woocommerce - 从订购的产品中获取元数据

javascript - Woocommerce 3 中没有在线支付交易的订单的谷歌分析集成

php - 正则表达式错误 preg_replace_callback() : Unknown modifier '.' in

php 希腊字符编码

javascript - AJAX 在一次提交中发布来自克隆表单的数据

php - 在 WooCommerce 中获取客户上次订单的产品

php - 无限滚动启用(wordpress)

php - 关于国家/地区更改 Ajax 更新 Woocommerce 中运输的结账