当订单中有延期交货项目时更改订单状态
Change order status when order has backorder items in it
在 WooCommerce 中,如果此订单中有延期交货的商品,如何将 on-hold
订单状态更改为其他状态?
我尝试使用挂钩在 woocommerce_order_status_on-hold
操作挂钩中的自定义函数,但没有成功。
谁能帮我解决这个问题?
谢谢。
function mysite_hold($order_id) {
$order = new WC_Order($order_id);
$items = $order->get_items();
$backorder = FALSE;
foreach ($items as $item) {
if ($item['Backordered']) {
$backorder = TRUE;
break;
}
}
if($backorder){
$order->update_status('completed'); //change your status here
}
}
add_action('woocommerce_order_status_on-hold', 'mysite_hold');
//You may need to store your backorder info like below
wc_add_order_item_meta($item_id, 'Backordered', $qty - max(0, $product->get_total_stock()));
请试试这个片段
这是一个挂钩在 woocommerce_thankyou
操作挂钩中的自定义函数,它将更改订单状态 如果此订单的状态为 "on-hold" 和 如果其中有任何缺货产品。
您将在函数中设置所需的新状态块更改。
这是自定义函数 (代码注释很好):
add_action( 'woocommerce_thankyou', 'change_paid_backorders_status', 10, 1 );
function change_paid_backorders_status( $order_id ) {
if ( ! $order_id )
return;
// HERE below set your new status SLUG for paid back orders
$new_status = 'completed';
// Get a an instance of order object
$order = wc_get_order( $order_id );
// ONLY for "on-hold" ORDERS Status
if ( ! $order->has_status('on-hold') )
return;
// Iterating through each item in the order
foreach ( $order->get_items() as $item ) {
// Get a an instance of product object related to the order item
$product = $item->get_product();
// Check if the product is on backorder
if( $product->is_on_backorder() ){
// Change this order status
$order->update_status($new_status);
break; // Stop the loop
}
}
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
代码已经过测试并且有效。
编辑代码错误 // 获取与订单项目相关的产品对象实例
$product = version_compare( WC_VERSION, '3.0', '<' ) ? wc_get_product($item['product_id']) : $item->get_product();
在 WooCommerce 中,如果此订单中有延期交货的商品,如何将 on-hold
订单状态更改为其他状态?
我尝试使用挂钩在 woocommerce_order_status_on-hold
操作挂钩中的自定义函数,但没有成功。
谁能帮我解决这个问题?
谢谢。
function mysite_hold($order_id) {
$order = new WC_Order($order_id);
$items = $order->get_items();
$backorder = FALSE;
foreach ($items as $item) {
if ($item['Backordered']) {
$backorder = TRUE;
break;
}
}
if($backorder){
$order->update_status('completed'); //change your status here
}
}
add_action('woocommerce_order_status_on-hold', 'mysite_hold');
//You may need to store your backorder info like below
wc_add_order_item_meta($item_id, 'Backordered', $qty - max(0, $product->get_total_stock()));
请试试这个片段
这是一个挂钩在 woocommerce_thankyou
操作挂钩中的自定义函数,它将更改订单状态 如果此订单的状态为 "on-hold" 和 如果其中有任何缺货产品。
您将在函数中设置所需的新状态块更改。
这是自定义函数 (代码注释很好):
add_action( 'woocommerce_thankyou', 'change_paid_backorders_status', 10, 1 );
function change_paid_backorders_status( $order_id ) {
if ( ! $order_id )
return;
// HERE below set your new status SLUG for paid back orders
$new_status = 'completed';
// Get a an instance of order object
$order = wc_get_order( $order_id );
// ONLY for "on-hold" ORDERS Status
if ( ! $order->has_status('on-hold') )
return;
// Iterating through each item in the order
foreach ( $order->get_items() as $item ) {
// Get a an instance of product object related to the order item
$product = $item->get_product();
// Check if the product is on backorder
if( $product->is_on_backorder() ){
// Change this order status
$order->update_status($new_status);
break; // Stop the loop
}
}
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
代码已经过测试并且有效。
编辑代码错误 // 获取与订单项目相关的产品对象实例
$product = version_compare( WC_VERSION, '3.0', '<' ) ? wc_get_product($item['product_id']) : $item->get_product();