Get the order ID in checkout page before payment process

后端 未结 3 1829
南旧
南旧 2020-12-18 16:38

In WooCommerce, I need to get order ID right in checkout page of WooCoommerce, before payment, when the order is created.

3条回答
  •  天命终不由人
    2020-12-18 17:26

    You can use a custom function hooked in woocommerce_checkout_order_processed action hook.
    Since woocommerce 3.0+ version, here Is the corresponding core code located in process_checkout() function.

    // Since WooCommerce version 3.0+
    do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );
    

    and below WooCommerce 3.0 version:

    // Since WooCommerce version 2.1+ (before version 3.0+)
    do_action( 'woocommerce_checkout_order_processed', $order_id, $this->posted );
    

    So there is 2 cases depending which version of woocommerce you are using:

    Since WooCommerce 3.0+ you can use 2 additional arguments in your hooked function and you will not need to create an instance of the order object as you get $order already as an argument.
    You will be able also to access the posted data directly through $posted_data argument.

    add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 3);
    function action_checkout_order_processed( $order_id, $posted_data, $order ) {
       // Do something
    }
    

    Since WooCommerce 2.1+ (Before WooCommerce 3.0), you have only the $order_id as argument, so you might be need to get an instance of $order object with wc_get_order() function:

    add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 1);
    function action_checkout_order_processed( $order_id ) {
       // get an instance of the order object
       $order = wc_get_order( $order_id );
    
       // Do something
    }
    

    The Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

提交回复
热议问题