在 Woocommerce 3 中以编程方式向订单添加费用 [英] Add a fee to an order programmatically in Woocommerce 3
问题描述
我正在即时"创建 Woocommerce 总计,因为我的购物车商品是从另一个 CMS 导入的.
I'm creating Woocommerce totals 'on-the-fly' as my cart items are imported from another CMS.
目前我无法为每个订单设置自定义费用",然后将订单标记为暂停":
Currently I am having trouble setting a custom 'fee' for each order, then marking the order as 'on-hold':
$order->set_date_created($creation_tsz);
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
$order->set_currency('GBP');
$order->add_fee('Imported Total', $imported_total_here);
$order->set_fee();
$order->calculate_totals();
$order->update_status('on-hold');
任何关于此的曲目将不胜感激.
Any track on this will be appreciated.
推荐答案
WC_Abstract_Legacy_Order
方法add_fee()
已弃用 并且set_fee()
方法不存在于WC_Order
类 (仅存在于WC_Cart
和WC_API_Orders
类).
The
WC_Abstract_Legacy_Order
methodadd_fee()
is deprecated andset_fee()
method doesn't exist for theWC_Order
Class (exist only forWC_Cart
andWC_API_Orders
classes).
要以编程方式向订单添加费用,从 Woocommerce 3 开始,就有点复杂了.有一些参数可以设置为费用名称、税收状态、税种(如果需要)和费用金额(不含税).
To add a Fee to an order programmatically since Woocommerce 3, it's a bit more complicated. There are some parameters to set as the Fee name, the tax status, the tax class (if needed) and the fee amount (excl. taxes).
还要进行税收计算,根据税收设置,您需要设置一个包含至少客户国家代码的数组(如果税收基于国家/地区)
Also to make the tax calculations, depending on the taxes settings, you will need to set an array containing at minima the customer country code (if the taxes are based on the country)
假设在下面的代码中费用金额变量名称是$imported_total_fee
:
Let say that the fee amount variable name is $imported_total_fee
in the code below:
$order->set_date_created($creation_tsz);
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
$order->set_currency('GBP');
## ------------- ADD FEE PROCESS ---------------- ##
// Get the customer country code
$country_code = $order->get_shipping_country();
// Set the array for tax calculations
$calculate_tax_for = array(
'country' => $country_code,
'state' => '',
'postcode' => '',
'city' => ''
);
// Get a new instance of the WC_Order_Item_Fee Object
$item_fee = new WC_Order_Item_Fee();
$item_fee->set_name( "Fee" ); // Generic fee name
$item_fee->set_amount( $imported_total_fee ); // Fee amount
$item_fee->set_tax_class( '' ); // default for ''
$item_fee->set_tax_status( 'taxable' ); // or 'none'
$item_fee->set_total( $imported_total_fee ); // Fee amount
// Calculating Fee taxes
$item_fee->calculate_taxes( $calculate_tax_for );
// Add Fee item to the order
$order->add_item( $item_fee );
## ----------------------------------------------- ##
$order->calculate_totals();
$order->update_status('on-hold');
$order->save();
经过测试并完美运行.
这篇关于在 Woocommerce 3 中以编程方式向订单添加费用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!