根据批准状态和特定订单项更改WooCommerce订单状态

时间:2020-05-27 17:47:21

标签: php wordpress woocommerce hook-woocommerce orders

当当前状态为“已批准”并且订单包含特定产品(id = 10)时,我尝试将WooCommerce订单状态更改为“正在处理”。

我尝试了以下代码,但无法正常工作。我是php的新手,不胜感激!

add_action('woocommerce_order_status_changed', 'ts_auto_complete_business_cards');

function ts_auto_complete_business_cards($order_id)
{

    if ( ! $order_id ) {
        return;
    }

    global $product;
    $order = wc_get_order( $order_id );

    if ($order->data['status'] == 'approved') {
        $items=$order->get_items();
        foreach ( $items as $item ) {
            $product_id = $item->get_product_id();
            if ($product_id!="10")
            {
                $order->update_status( 'completed' );
            }

        }

    }
}

1 个答案:

答案 0 :(得分:1)

  • woocommerce_order_status_changed有4个参数
  • 这行-> if ($product_id!="10")说不等于,您还比较了一个字符串而不是一个数字

尝试一下

function action_woocommerce_order_status_changed( $order_id, $old_status, $new_status, $order ) {

    // Compare
    if( $old_status === 'approved' ) {
        // Get items
        $items = $order->get_items();

        foreach ( $items as $item ) {
            // Get product id
            $product_id = $item->get_product_id();

            if ($product_id == 10 ) {
                $order->update_status( 'processing' );
                break;
            }
        }
    }
}
add_action( 'woocommerce_order_status_changed', 'action_woocommerce_order_status_changed', 10, 4 );