当订单中有延期交货项目时更改订单状态

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();