Обновление 2 – рабочее решение (используется ловушка уведомлений по электронной почте)
Проблема заключается в том, что использование хука уведомлений по электронной почте может запускать действие 2 раза, например, когда делается новый заказ (уведомление для менеджера магазина и уведомление для покупателя).
Вы хотите использовать это событие "Новый заказ" для заказов, находящихся в состоянии обработки.
Чтобы ваше действие не запускалось дважды с помощью события WooCommerce с уведомлением о новом заказе, мы используем 'customer_processing_order'
вместо 'new_order'
идентификатора электронной почты (уведомление событие).
Здесь нам не нужно получать объект $order
, так как мы получили его в качестве аргумента в этой перехваченной функции.
Итак, вот ваш окончательный функциональный код:
add_action( 'woocommerce_email_before_order_table', 'custom_action_on_completed_customer_email_notification', 10, 4 );
function custom_action_on_completed_customer_email_notification( $order, $sent_to_admin, $plain_text, $email ) {
if( 'customer_processing_order' == $email->id ){ // for processing order status customer notification…
foreach ($order->get_items() as $item_id => $item_values) {
$product_name = $item_values['name'];
echo $product_name;
break; // (optional) stop loop to first item
}
}
}
Это проверенный и рабочий ответ на этот вопрос
Связанные рабочие ответы:
Обновление 1 (альтернативный хук)
Попытка использовать хук woocommerce_thankyou
, который срабатывает при просмотре заказа после его обработки:
add_action( 'woocommerce_thankyou', 'create_job_openings', 10, 1 );
function create_job_openings( $order_id ) {
if ( ! $order_id )
return;
$order = wc_get_order( $order_id );
foreach ($order->get_items() as $item_id => $item_values) {
$product_name = $item_values['name'];
var_dump($product_name);
break; // (optional) stop loop to first item
}
}
(Не работает для OP)
Вы должны попробовать это вместо функции wc_get_order()
таким образом, и ваш код будет:
add_action( 'woocommerce_new_order', 'create_job_openings', 10, 1);
function create_job_openings($order_id) {
$order = wc_get_order( $order_id );
$order_items = $order->get_items();
foreach ($order_items as $item_id => $item_values) {
$product_name = $item_values['name'];
var_dump($product_name);
break; // (optional) stops on first item
}
}
Вы можете посмотреть Как получить информацию о заказе WooCommerce где многое объясняется...
(Не работает для OP)
person
LoicTheAztec
schedule
12.01.2017