Ситуация: заказчику нужно добавить в магазине на Вукомерс возможность оставлять заказы, которые оформляются только после звонка менеджера. Эта дополнительная функция была решена с помощью плагина. Однако после добавления этой функции оказалось, что все заказы, оформленные таким образом, получают статус «В ожидании оплаты». При этом письма админу и клиенту не отправляются, пока статус не будет изменен вручную на «В обработке».
Попытки изменять статус в автоматическом режиме успехом не увенчались. К счастью, нашел другой путь решения этой задачи. Авторский отчет по этому решению можно посмотреть здесь 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); }
Если вы случайным образом наткнулись на мою заметку и вам нужны более подробные пояснения по работе скрипта, смотрите по выше приведенной ссылке. Надеюсь, что оригинал еще жив 🙂