Диагностика задачи: зачем автоматизировать отправку отзывов после заказа
В интернет-магазинах на WooCommerce важно собирать отзывы клиентов для повышения доверия и улучшения SEO. Ручное напоминание клиентам о необходимости оставить отзыв часто забывается или игнорируется. Автоматизация отправки приглашений к отзыву сразу после смены статуса заказа на "завершён" решает эту проблему.
Пошаговое решение: как использовать хук woocommerce_order_status_changed для автоматической отправки писем с просьбой оставить отзыв
1. Подключение к хуку
Хук woocommerce_order_status_changed вызывается при каждом изменении статуса заказа. Его параметры:
$order_id— ID заказа$old_status— предыдущий статус$new_status— новый статус
Нам нужно отследить переход на статус completed.
2. Пример кода функции для отправки письма
add_action('woocommerce_order_status_changed', 'wpd_send_review_request', 10, 3);
function wpd_send_review_request($order_id, $old_status, $new_status) {
if ($new_status !== 'completed') {
return;
}
$order = wc_get_order($order_id);
if (!$order) {
return;
}
$email = $order->get_billing_email();
$name = $order->get_billing_first_name();
$subject = 'Пожалуйста, оставьте отзыв о вашем заказе';
$message = "Здравствуйте, $name!\n\nСпасибо за ваш заказ №$order_id. Мы будем признательны, если вы оставите отзыв на нашем сайте.
Оставить отзыв можно по ссылке: " . get_permalink(wc_get_page_id('shop')) . "#reviews";
wp_mail($email, $subject, $message);
}3. Добавление проверки, чтобы не отправлять письмо повторно
Чтобы избежать повторной отправки, используем мета-данные заказа:
add_action('woocommerce_order_status_changed', 'wpd_send_review_request_once', 10, 3);
function wpd_send_review_request_once($order_id, $old_status, $new_status) {
if ($new_status !== 'completed') {
return;
}
$order = wc_get_order($order_id);
if (!$order) {
return;
}
if ($order->get_meta('_review_request_sent')) {
return; // письмо уже отправлено
}
$email = $order->get_billing_email();
$name = $order->get_billing_first_name();
$subject = 'Пожалуйста, оставьте отзыв о вашем заказе';
$message = "Здравствуйте, $name!\n\nСпасибо за ваш заказ №$order_id. Мы будем признательны, если вы оставите отзыв на нашем сайте.
Оставить отзыв можно по ссылке: " . get_permalink(wc_get_page_id('shop')) . "#reviews";
wp_mail($email, $subject, $message);
$order->update_meta_data('_review_request_sent', 'yes');
$order->save();
}Проверка результата после внедрения
- Создайте тестовый заказ в WooCommerce и переведите его в статус
completed. - Проверьте, что письмо с просьбой оставить отзыв приходит на email, указанный в заказе.
- Убедитесь, что при повторном переводе заказа в статус
completedписьмо не отправляется повторно. - Логи сервера и очередь отправки почты можно просмотреть для диагностики (например, с помощью плагина WP Mail Logging).
Частые ошибки и как исправить
- Письмо не отправляется: проверьте корректность работы функции
wp_mailв WordPress, настройте SMTP через плагин (например, WP Mail SMTP). - Письма отправляются несколько раз: ошибка в проверке мета-данных заказа; убедитесь, что мета сохраняется и проверяется правильно.
- Хук не срабатывает на нужном статусе: убедитесь, что статус
completedприменяется именно через WooCommerce и не переименован или не локализован в вашей установке. - Ссылки в письме некорректны: используйте
get_permalinkс ID страницы магазина, для корректных URL.
Практические советы по безопасности и производительности
- Используйте проверку nonce и права доступа, если расширите функционал для взаимодействия с пользователем.
- Для отправки большого количества писем используйте SMTP или сторонние сервисы (Mailgun, SendGrid), чтобы избежать попадания в спам.
- Кэширование страниц не должно мешать работе хуков WooCommerce, поэтому не отключайте кеширование глобально, а настраивайте исключения для страниц оформления заказа и аккаунта.
- Храните мета-данные заказа с префиксом, чтобы избежать конфликтов с другими плагинами.
Сравнение вариантов реализации автоматической отправки отзывов
| Способ | Плюсы | Минусы |
|---|---|---|
Использование хука woocommerce_order_status_changed с кастомным кодом | Полный контроль, нет зависимости от плагинов, легко кастомизировать | Требует навыков разработки, нужно тестировать отправку почты |
| Использование плагинов для отзывов с автоматическими напоминаниями | Простая настройка, готовый функционал с шаблонами писем | Может влиять на производительность, ограничена кастомизация |
| Ручная отправка писем через CRM или email-маркетинг | Гибкость и расширенный функционал маркетинга | Отсутствие автоматизации на уровне WooCommerce, требует дополнительного ПО |