Диагностика задачи: зачем добавлять дополнительное уведомление о платеже в WooCommerce
По умолчанию WooCommerce отправляет стандартные письма клиенту и администратору при изменении статуса заказа, включая успешную оплату. Однако в ряде случаев требуется отправить кастомные уведомления — например, в сторонние сервисы, CRM, мессенджеры или добавить дополнительный контент в письмо. Для этого нужно использовать хуки WooCommerce, реагирующие на смену статуса заказа, и внедрять собственный код отправки уведомлений.
Какие хуки WooCommerce использовать для уведомлений о платеже
Основной хук для отслеживания изменения статуса заказа — woocommerce_order_status_changed. Он вызывается с параметрами: ID заказа, старый статус, новый статус. Для отлавливания момента успешной оплаты чаще всего используют переход заказа в статус processing или completed (в зависимости от настроек оплаты и типа товара).
Пример базового подключения:
add_action('woocommerce_order_status_changed', 'custom_payment_notification', 10, 3);
function custom_payment_notification($order_id, $old_status, $new_status) {
if ($new_status === 'processing') {
// Логика уведомления
}
}Пошаговое решение: отправка кастомного уведомления при платеже
1. Подключаем хук
Добавьте следующий код в functions.php вашей темы или в кастомный плагин:
add_action('woocommerce_order_status_changed', 'send_custom_payment_notification', 10, 3);
function send_custom_payment_notification($order_id, $old_status, $new_status) {
if ($new_status === 'processing') {
$order = wc_get_order($order_id);
if (!$order) return;
$email = $order->get_billing_email();
$total = $order->get_total();
$items = [];
foreach ($order->get_items() as $item) {
$items[] = $item->get_name() . ' x ' . $item->get_quantity();
}
$message = "Поступила оплата по заказу #$order_id\n";
$message .= "Покупатель: $email\n";
$message .= "Товары: " . implode(', ', $items) . "\n";
$message .= "Сумма: $total";
// Отправка письма (пример на wp_mail)
wp_mail('you@example.com', "Новый платеж по заказу #$order_id", $message);
}
}2. Настройка адреса и текста уведомления
Замените you@example.com на нужный адрес. В тексте можно добавить любые поля заказа, например телефон, адрес, примечания.
Проверка результата после внедрения
1. Создайте тестовый заказ в магазине и оплатите его в режиме теста (например, с помощью платежного шлюза Sandbox).
2. Проверьте почтовый ящик, указанный в функции, на наличие письма с уведомлением.
3. Если письма нет, временно добавьте логирование:
error_log('send_custom_payment_notification triggered for order ' . $order_id);И проверьте debug.log в папке wp-content.
Частые ошибки и как исправить
- Письма не отправляются: Проверьте, что функция
wp_mailработает на сервере. Возможно, нужен SMTP-плагин для корректной отправки. - Хук не срабатывает: Убедитесь, что меняется именно статус
processing. Для цифровых товаров может использоваться статусcompleted. В этом случае замените условие на$new_status === 'completed'. - Функция подключена в неверном месте: Код должен быть в
functions.phpактивной темы или в плагине, а не в шаблоне. - Проблемы с кодировкой письма: Проверьте, что заголовки письма корректно задаются, особенно если добавляете HTML.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые операции внутри хука (например, вызовы к внешним API лучше делать асинхронно или через WP-Cron).
- Проверяйте тип данных заказа, чтобы не запускать код для неподходящих заказов (например, только для определённых типов товаров).
- Используйте nonce и другие методы проверки при расширении функционала, если добавляете формы для настройки уведомлений.
- Для более гибкой работы с уведомлениями рассмотрите использование плагинов типа Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=2wp.ru&utm_medium=article&utm_campaign=kak-ispolzovat-woocommerce-hooks-dlya-dopolnitelnogo-uvedomleniya-o-platezhe), которые оптимизируют работу почты и добавляют расширенные настройки.
Сравнение способов отправки уведомлений в WooCommerce
| Способ | Плюсы | Минусы | Пример |
|---|---|---|---|
Использование хука woocommerce_order_status_changed |
Прямой контроль, можно отправить любые данные | Требует кодинга, может повлиять на производительность | Код из статьи |
| Плагин для уведомлений (например, WP Mail SMTP) | Простота настройки, поддержка SMTP | Ограничена кастомизация логики уведомлений | Настройка через админку |
| Вебхуки и интеграция с CRM | Автоматизация, интеграция с внешними сервисами | Сложность реализации, возможна задержка | Отправка через wp_remote_post |