首先,欢迎来到社区:)
添加/删除订单项目(例如产品)时,WooCommerce使用Ajax调用来更新订单。
向订单中添加新项目WC_AJAX::add_order_item()
. 此方法执行添加过程,然后激发woocommerce_ajax_order_items_added
行动挂钩。我们可以用这个动作在订单上做一些讨厌的事情!
例如,如果我想添加总计为1000的订单费用,当产品类别188中的一个产品添加到订单中时,这将实现以下技巧:
add_action(\'woocommerce_ajax_order_items_added\', \'tst_update_order\', 10, 2);
/**
* @param \\WC_Order_Item[] $added_items
* @param \\WC_order $order
*/
function tst_update_order( $added_items, $order )
{
foreach ( $added_items as $added_item ) {
if ( \'line_item\' === $added_item->get_type() ) {
/** @var \\WC_Order_Item_Product $added_item */
$product = $added_item->get_product();
$cat_ids = $product->get_category_ids();
if ( in_array( 188, $cat_ids ) ) {
$fee = new \\WC_Order_Item_Fee();
$fee->set_name(\'Order Fee\');
$fee->set_total(\'1000\');
$fee->save();
$order->add_item($fee);
$order->save();
}
}
}
}
Note: 还有一个动作
woocommerce_ajax_add_order_item_meta
更新每个订单项目时激发。您可能希望使用它,而不是循环
$added_items
.
从订单中删除现有项目从当前订单中删除项目的相应方法是WC_AJAX::remove_order_item()
. 此方法本身使用wc_delete_order_item()
函数删除订单项。您可能需要使用woocommerce_before_delete_order_item
此函数中定义的用于执行计算和更新订单的操作。