WooCommerce: использование хука woocommerce_order_status_changed для автоматической отправки отзывов

Диагностика задачи: зачем автоматизировать отправку отзывов после заказа

В интернет-магазинах на 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, требует дополнительного ПО
Как отключить XML-RPC в WordPress без помощи плагинов
03.01.2026
Как создать динамическую таблицу в WordPress с помощью шорткода
30.12.2025
Как создать автоматический импорт товаров в WooCommerce из JSON файла
23.12.2025
Оптимизация загрузки шрифтов в WordPress для ускорения сайта
20.02.2026
WooCommerce: использование хука woocommerce_order_status_changed для автоматической отправки отзывов
13.07.2026