Получить идентификатор заказа в перехватчике woocommerce_new_order

#php #wordpress #woocommerce #hook-woocommerce

#php #wordpress #woocommerce #перехват-woocommerce

Вопрос:

почему не удается получить идентификатор заказа в новом порядке?

Этот код не работает

 add_action( 'woocommerce_new_order', 'get_order_details_woo',  1, 1  );
function get_order_details_woo ($order_id)
{

    $order = wc_get_order( $order_id );

    foreach ($order->get_items() as $item_key => $item_values):

        $item_id = $item_values->get_id();

        $item_data = $item_values->get_data();

        $product_name = $item_data['name'];

        //echo $product_name;
    endforeach;

}
  

Но этот код работает

  add_action( 'woocommerce_new_order', 'get_order_details_woo',  1, 1  );

    function get_order_details_woo ()
    {

        $order = wc_get_order( 100);

        foreach ($order->get_items() as $item_key => $item_values):


            $item_data = $item_values->get_data();

            $product_name = $item_data['name'];

            //echo $product_name;
endforeach;

    }
  

Как получить идентификатор в новом заказе?

Получить новые детали заказа, если у меня нет идентификатора заказа?

Комментарии:

1.Если вы посмотрите на исходный код, то $order_id он включен в подключенную функцию в качестве аргумента, точно так же, как в вашем первом коде. Итак, проблема в чем-то другом… Почему вы используете этот код? и для чего?

Ответ №1:

Вы получаете идентификатор заказа с помощью этого перехватчика, но кажется, что заказ только что создан в этот момент, еще без товарных позиций. Вы можете проверить это с помощью var_dump.

попробуйте другой захват:

 add_action( 'woocommerce_checkout_create_order', 'get_order_details_woo',  1, 1  );
  

этот параметр запускается сразу после того, как объект order получит свои данные, и до того, как они будут сохранены в базе данных. Вам не нужно извлекать идентификатор заказа здесь, потому что вы получаете объект order напрямую.

Ответ №2:

add_action( ‘woocommerce_checkout_update_order_meta’, ‘get_order_details_woo’, 10, 2 ); функция get_order_details_woo($order_id, $data) { }