Update 2 - Рабочий раствор(используя крючок уведомление по электронной почте)
Проблема заключается в том, когда с помощью уведомлений по электронной почте крюк может стрелять действие, 2 раза, например, когда новый заказ - горничная (уведомление для менеджера магазина и уведомление для клиента).
Вы хотите использовать это событие «Новый заказ» для Заказов, находящихся в состоянии «обработки».
Чтобы избежать ваших действий, чтобы выстрелить 2 раза используя Новое событие уведомления порядка WooCommerce, мы используем 'customer_processing_order'
вместо 'new_order'
электронной почты ID (уведомление о событии).
Здесь нам не нужно, чтобы получить объект $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
}
}
Вы можете посмотреть на How to get WooCommerce order details где многое объясняется ...
(Нет t для OP)
Вы проверили, что $ order_id действительно подходит? – Gulshan
сделать одно дело глобальная woocommerce в функции – Gulshan
@sam проверить это http://stackoverflow.com/questions/39401393/how-to-get-woocommerce-order-details – Gulshan