Как сделать отправку писем со статусом «В ожидании оплаты» в woocommerce

Ситуация: заказчику нужно добавить в магазине на Вукомерс возможность оставлять заказы, которые оформляются только после звонка менеджера. Эта дополнительная функция была решена с помощью плагина. Однако после добавления этой функции оказалось, что все заказы, оформленные таким образом, получают статус «В ожидании оплаты». При этом письма админу и клиенту не отправляются, пока статус не будет изменен вручную на «В обработке».

Попытки изменять статус в автоматическом режиме успехом не увенчались. К счастью, нашел другой путь решения этой задачи. Авторский отчет по этому решению можно посмотреть здесь https://codeview.ru/wordpress/pending-mail-woocommerce

У себя же на блоге я позволю себе продублировать данное решение, прежде всего, для собственного удобства.

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);
 }

Если вы случайным образом наткнулись на мою заметку и вам нужны более подробные пояснения по работе скрипта, смотрите по выше приведенной ссылке. Надеюсь, что оригинал еще жив 🙂

Поделиться с друзьями