Как вручную запустить письмо о завершении заказа в WooCommerce?

18 апр. 2015 г., 22:09:23
Просмотры: 28.3K
Голосов: 12

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

Спасибо!

0
Все ответы на вопрос 3
1
18

Вы можете попробовать это

$mailer = WC()->mailer(); // Получаем объект почтового сервиса WooCommerce
$mails = $mailer->get_emails(); // Получаем все доступные письма
if ( ! empty( $mails ) ) { // Проверяем, есть ли письма
    foreach ( $mails as $mail ) { // Перебираем все письма
        if ( $mail->id == 'customer_completed_order' ) { // Ищем письмо о завершенном заказе
           $mail->trigger( $order->id ); // Отправляем письмо для указанного заказа
        }
     }
}
19 апр. 2015 г. 00:06:39
Комментарии

Спасибо. Есть ли способ предотвратить злоупотребление этой функцией? Например, если я помещу этот код в определённое место на странице благодарности, можно ли сделать так, чтобы письмо не отправлялось каждый раз, когда пользователь обновляет страницу?

user3210369 user3210369
20 апр. 2015 г. 06:51:16
2

Вместо использования цикла или повторного использования одного и того же объекта, как предложил @Sumit. Вы можете создать новый объект и затем вызвать триггер.

$email_oc = new WC_Email_Customer_Completed_Order();
$email_oc->trigger($order_id);
20 сент. 2018 г. 06:50:53
Комментарии

Если это стандартный класс заказов WP, то да... Если он кастомный, то он будет добавлен с помощью фильтра woocommerce_email_classes, поэтому кастомный класс письма может просто оказаться недоступным при запросе.

Ramon Fincken Ramon Fincken
14 мая 2021 г. 16:25:38

@RamonFincken это находится в ядре WooCommerce

GeorgeP GeorgeP
9 февр. 2024 г. 02:45:14
0

Это также можно использовать следующим образом:

WC()->mailer()->emails['WC_Email_Customer_Completed_Order']->trigger( $order_id );
11 июл. 2021 г. 14:38:41