Отправка письма при смене статуса заказа в woocommerce

При работе с вродпрессом и интернет магазине на woocommerce, вы можете столкнуться с ситуацией, когда вам необходимо отправлять письмо при смене статуса заказа.

К примеру при статусе completed отправляется письмо клиенту, но у вас ведь может возникнуть необходимость отправить письмо еще кому-нибудь, например менеджеру или администратору магазина.

Для этого наверняка есть какие-нибудь плагины, но на самом деле данную проблему, можно решить в пару строчек кода в файле functions.php, который должен находится в вашем шаблоне

Способ номер 1:

	add_filter('woocommerce_order_status_completed', 'competedStatusOrder');
	function competedStatusOrder( $order_id ) {
			/*
			$OrderInfo = wc_get_order( $order_id );
			$email_notifications = WC()->mailer()->get_emails();
			
			$email_subject = $email_notifications['WC_Email_Customer_Completed_Order']->get_default_subject();
			$site_title = get_bloginfo('name');
			$email_subject = str_replace("{site_title}",$site_title,$email_subject);
			$email_heading = $email_notifications['WC_Email_Customer_Completed_Order']->get_default_heading();
			
			
			$args = array(
						'order'         => $OrderInfo,
						'email_heading' => $email_heading,
						'sent_to_admin' => false,
						'plain_text'    => false,
					);
			$content_info = wc_get_template_html("emails/customer-completed-order.php",$args);			
			*/
			$headers= "MIME-Version: 1.0\r\n";
			$headers .= "Content-type: text/html; charset=utf8\r\n";
			$content_info = "Текст письма, которое будет отправляться при смене статуса на completed";
			$email_subject = "Тема письма, которое будет отправляться при смене статуса на completed";
			$WC_Email = new WC_Email();
			$WC_Email->send( 'youremail@mail.com', $email_subject, $content_info, $headers, $attachments );	
	}
	

Функция competedStatusOrder будет срабатывать, когда статус поменяют на completed.

В этом коде есть закоментированная часть, это пример, если вам надо отправить письмо по шаблону, как оно уходит клиенту.

Если вам нужно отправлять письма при других статусах, то используйте хуки:

add_action('woocommerce_order_status_pending_paymen', 'my_func_1'); - получил заказ
add_action('woocommerce_order_status_failed', 'my_func_1'); - не смог оплатить или отклонили оплату
add_action('woocommerce_order_status_processing', 'my_func_1'); - заказ в ожидании исполнения
add_action('woocommerce_order_status_completed', 'my_func_1'); - заказ выполнен
add_action('woocommerce_order_status_on-hold', 'my_func_1'); - ожидание оплаты, кол-во продукта изменилось
add_action('woocommerce_order_status_cancelled', 'my_func_1'); - заказ отменен
add_action('woocommerce_order_status_refunded', 'my_func_1'); - заказ возвращен администратором

Второй способ более простой, он заключается в том, что мы просто добавим в получатели, email, который нам необходим:

	add_action( 'woocommerce_email_recipient_customer_completed_order', 'your_email_recipient_filter_function', 10, 2);
	function your_email_recipient_filter_function($recipient, $object) {
			$recipient = $recipient.", youremail@mail.com";
			return $recipient;
	}

В данном случае $recipient - это почта клиента, минус такого способа, то что клиент будет видеть в получателях почту, которую вы добавите, а это как правило не нужно.

На этом все, если появятся вопросы, то пишите, постараюсь ответить.

Комменатрии
Я не робот
Отправить