Настройка отправки писем "В ожидании" с woocommerce | Code View
Настройка отправки писем «В ожидании» с woocommerce

Настройка отправки писем «В ожидании» с woocommerce

Всем привет. Недавно решал задачу отправки писем с интернет-магаpина на wordpress с настроенным woocommerce. На сайте использовалась интеграция с crm системой retail crm. Задача была в том, чтобы отправлять письма о новом заказе клиенту и администратору, при этом статус заказа должен быть обязательно «В ожидании оплаты».

Как известно в woocommerce по умолчанию уведомления о таком статусе не приходят. Но если настроить присваивание статусов «В обработке» или «На удержании» новым заказам, то уведомления будут приходить на почту. Сложность заключалась в том что простым присвоением статуса новым заказам данную задачу решить нельзя было, поскольку на сайте используется crm, которая сама присваивает статусы после обработки.

Решить проблему удалось с помощью хуков в файле functions.php. Файл functions.php позволяет добавлять пользовательские функции. Располагается в папке темы по пути ../sait.ru/public_html/wp-content/themes/yourtheme/functions.php и загружается каждый раз, во время просмотра внешней части сайта.

add_action( 'woocommerce_checkout_order_processed', 'my_func', 20, 1 );
my_func( $order_id ) {
     $order = wc_get_order( $order_id );
     //отфильтровываем только заказы в статусе "ожидание"
     if( ! $order->has_status( 'pending' ) ) return;
     $wc_email = WC()->mailer()->get_emails()['WC_Email_New_Order'];
     // Изменяем тему
     $wc_email->settings['subject'] = ('{site_title} - New customer Pending order ({order_number}) - {order_date}');     
     // Изменяем заголовок     
     $wc_email->settings['heading'] = ('New customer Pending Order');
     // Отправить уведомление «Новое письмо» (администратору)
     $wc_email->trigger( $order_id );
     // Сообщение пользователю
     $email_heading = 'Спасибо за заказ';
     $args = array(
                   'order'         => $order,
                   'email_heading' => $email_heading,
                   'sent_to_admin' => false,
                   'plain_text'    => false,
                 );
     $content_info = wc_get_template_html("emails/customer-processing-order.php", $args);
     $site_title = get_bloginfo('name');
     $customer_email = $order->get_billing_email();
     $email_subject = $site_title.' - Новый заказ';
     wc_mail($customer_email, $email_subject, $content_info);
 }

Поясним что тут происходит. Добавляем хук на срабатывание от woocommerce_checkout_order_processed, вызываем нашу функцию my_func. Отфильтровываем только заявки в статусе ожидание. Устанавливаем в письме нужные нам зоголвки и отправляем методом trigger письмо администратору. После этого занимаемся отправкой письма пользователю: устанавливаем заголовки, выбираем необходимый шаблон woocommerce mail для отправки (customer-processing-order.php) получаем адрес клиента из заказа и методом wc_mail отправляем ему письмо.

Добавить комментарий

Закрыть меню
55269673