Отправьте администратору уведомление по электронной почте о статусе отложенного заказа в WooCommerce

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

Я хотел бы отправить электронное письмо администратору для такого рода заказов. Как я могу это сделать?


person burhan jamil    schedule 28.07.2017    source источник
comment
В woocommerce есть МНОГО крючков, я уверен, что один из них может оказаться полезным: docs.woocommerce.com/wc-apidocs/hook-docs.html   -  person WheatBeak    schedule 28.07.2017


Ответы (2)


ОБНОВЛЕНИЕ 2 (изменение с woocommerce_new_order на woocommerce_checkout_order_processed благодаря Селин Гарель)

Этот код будет активирован во всех возможных случаях, когда новый заказ получит статус ожидания, и автоматически вызовет уведомление по электронной почте о новом заказе:

// New order notification only for "Pending" Order status
add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );
function pending_new_order_notification( $order_id ) {

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );

    // Only for "pending" order status
    if( ! $order->has_status( 'pending' ) ) return;

    // Send "New Email" notification (to admin)
    WC()->mailer()->get_emails()['WC_Email_New_Order']->trigger( $order_id );
}

Код находится в файле functions.php вашей активной дочерней темы (или темы) или также в любом файле плагина.


Более настраиваемая версия кода (при необходимости), которая сделает отложенные заказы более заметными:

// New order notification only for "Pending" Order status
add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );
function pending_new_order_notification( $order_id ) {
    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );

    // Only for "pending" order status
    if( ! $order->has_status( 'pending' ) ) return;

    // Get an instance of the WC_Email_New_Order object
    $wc_email = WC()->mailer()->get_emails()['WC_Email_New_Order'];

    ## -- Customizing Heading, subject (and optionally add recipients)  -- ##
    // Change Subject
    $wc_email->settings['subject'] = __('{site_title} - New customer Pending order ({order_number}) - {order_date}');

    // Change Heading
    $wc_email->settings['heading'] = __('New customer Pending Order'); 
    // $wc_email->settings['recipient'] .= ',[email protected]'; // Add email recipients (coma separated)

    // Send "New Email" notification (to admin)
    $wc_email->trigger( $order_id );
}

Код находится в файле functions.php вашей активной дочерней темы (или темы) или также в любом файле плагина.

Эта версия позволяет настраивать заголовок электронной почты, тему, добавлять получателей ...

person LoicTheAztec    schedule 28.07.2017
comment
дорогая, эта функция выглядит очень круто, но у меня она не работает. Я использую версию wp 4.8. - person burhan jamil; 31.07.2017
comment
@burhanjamil Я обновил свой ответ, попробуйте. Я поменял хук, теперь он должен работать в любых случаях при статусе отложенных ордеров ... Теперь код стал более эффективным, компактным и легким. Есть 2 версии: одна просто отправляет уведомление о новом заказе по умолчанию, а другая позволяет выполнять некоторые настройки (при необходимости)… - person LoicTheAztec; 12.02.2018
comment
Это не работает. Я также протестировал, создав файл simple.txt, либо ловушка вызывает, либо нет. Он вызывает функцию, но не может вызвать электронное письмо с заказом. - person dineshkashera; 18.07.2018
comment
Спасибо работает прямо из коробки. Wordpress версии 5.2.2 - person Joost Pielage; 30.06.2019
comment
Работает отлично. Спасибо. У меня только один вопрос? Я хочу отправить электронное письмо, когда заказ находится на рассмотрении, а методом оплаты является кредитная карта. Как я мог это сделать? - person Miran Urbas; 04.12.2019

Я пробовал с ответом LoicTheAztec, @LoicTheAztec большое спасибо за ваш отличный код.

Я только что изменил хук действия с woocommerce_new_order на woocommerce_checkout_order_processed, чтобы заставить его работать.

Вот действие: add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );

Надеюсь, это поможет.

person Céline Garel    schedule 06.06.2018
comment
Спасибо за это исправление! когда я использовал woocommerce_new_order, заказная почта пришла без продуктов, но с помощью woocommerce_checkout_order_processed она была исправлена, и почта пришла так, как должна :-) - person EranKT; 14.06.2018