更改 WooCommerce 中没有特定产品的“暂停”订单的订单状态

时间:2021-02-22 11:27:30

标签: php wordpress woocommerce hook-woocommerce orders

我当前的代码即使没有 if 语句,仍然将所有“暂停”订单的状态更改为“customstatus”。即使它应该只在订单包含特定产品 ID 时更改。此代码还将自定义元添加到用户。不知道我做错了什么。任何帮助将不胜感激。

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']=='on-hold') {
        $items=$order->get_items();
        foreach ( $items as $item ) {
            $product_id = $item->get_product_id();
            if ($product_id!=="193007")
            {
                $current_user = wp_get_current_user();
                $current_user_id = get_current_user_id();
                $order->update_status( 'customstatus' );
                update_user_meta( $current_user_id, 'custommeta', '2' );
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您的代码中有一些错误和遗漏。请尝试以下操作:

add_action('woocommerce_order_status_on-hold', 'auto_complete_business_cards', 10, 2 );
function auto_complete_business_cards( $order_id, $order ) {
    $product_id = 193007;
    $found      = false;
            
    // loop though order status     
    foreach ( $order->get_items() as $item ) {
        if ( $item->get_product_id() !== $product_id) {
            $found = true;
            break;
        }
    }
    
    if ( ! $found ) {
        $order->update_status( 'customstatus' );
        update_user_meta( $order->get_user_id(), 'custommeta', '2' );
    }
}

或者还有这个:

add_action('woocommerce_order_status_changed', 'auto_complete_business_cards', 10 , 4 );
function auto_complete_business_cards( $order_id, $order ) {
    if ($new_status === 'on-hold' ) {
        $product_id = 193007;
        $found      = false;
                
        // loop though order status     
        foreach ( $order->get_items() as $item ) {
            if ( $item->get_product_id() !== $product_id) {
                $found = true;
                break;
            }
        }
        
        if ( ! $found ) {
            $order->update_status( 'customstatus' );
            update_user_meta( $order->get_user_id(), 'custommeta', '2' );
        }
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中。它应该会更好地工作。