Cтатусы заказа плагина Woocommerce в WordPress
Как и любой интернет-магазин Woocommerce присваивает заказам определенные статусы в зависимости от отплаты и формирования заказа. Существует 7 различных статусов заказа:
- В ожидании оплаты (Pending payment)
- Обработка (Processing)
- На удержании (On-Hold)
- Выполнен (Completed)
- Отменен (Cancelled)
- Возвращен (Refunded)
- Не удался (Failed)
Связь формы оплаты и статуса заказа
Если выбрать форму оплаты наличными — статус заказа будет Обработка. Подразумевается, что система никак не проследит момент, когда покупатель оплатит заказ, т.е. необходимо вручную менять статус заказа на Выполнен после получения оплаты, либо Отменен в случае отмены заказа.
При способе оплаты Прямой банковский перевод — заказу присваивается статус На удержании. В данном случае система опять же вряд ли сможет проследить оплату — это приходиться делать вручную, товар при этом резервируется.
Оплата электронным платежом (например через ЯндексКасса). После оформления заказ получает статус В ожидании оплаты. Если в течение N-го времени заказ не оплачен, то статус меняется на Отменен. Если оплата прошла успешно статус меняется на Обработка.
Уведомление на почту при статусе «в ожидании оплаты»
Добавьте следующий код к вашему functions.php
/** *Уведомление о новом заказе для статуса «В ожидании оплаты» */ add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 ); function pending_new_order_notification( $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'] = __('Новый заказ ({order_number}) - {order_date}'); // Изменяем заголовок $wc_email->settings['heading'] = __('{site_title} - Новый заказ ({order_number}) - {order_date}'); $wc_email->settings['recipient'] .= 'Ваша_почта@mail.ru'; // Отправить уведомление «Новое письмо» (администратору) $wc_email->trigger( $order_id ); }
Завершить заказ, когда произойдет переход на страницу «thankyou» (то есть после оплаты)
/** * Завершить заказ, после оплаты. Автопереход в статус "Выполнен" */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' ); function custom_woocommerce_auto_complete_order( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'completed' ); }