Диагностика задачи: зачем нужно отслеживать изменения в WooCommerce
В интернет-магазине на WooCommerce часто требуется знать, когда и какие изменения происходят: обновление статусов заказов, изменение цен, изменений в товарах, добавление новых пользователей и прочее. Это нужно для своевременного реагирования, аналитики и поддержки клиентов. Без автоматизации это сложно, особенно если магазин крупный.
Как отследить изменения в WooCommerce: обзор доступных хуков
WooCommerce строится на базе WordPress и использует множество хуков и фильтров. Для отслеживания изменений удобно использовать следующие действия:
woocommerce_update_product— при обновлении товара;woocommerce_order_status_changed— при изменении статуса заказа;profile_update— при обновлении профиля пользователя;save_post_shop_order— при сохранении заказа;woocommerce_new_order— при создании нового заказа.
Эти хуки позволяют «подписаться» на события и запускать собственный код, например, отправку уведомлений.
Пошаговое решение: отправка уведомлений при изменении статуса заказа
Рассмотрим практический пример — отправку email-уведомления администратору при смене статуса заказа.
add_action('woocommerce_order_status_changed', 'wpd_notify_admin_on_order_status_change', 10, 4);
function wpd_notify_admin_on_order_status_change($order_id, $old_status, $new_status, $order) {
$admin_email = get_option('admin_email');
$subject = "Заказ #$order_id изменил статус с $old_status на $new_status";
$message = "Статус заказа #$order_id был изменён.
Старый статус: $old_status
Новый статус: $new_status
Ссылка на заказ: " . admin_url('post.php?post=' . $order_id . '&action=edit');
wp_mail($admin_email, $subject, $message);
}
Код подключается в functions.php темы или в отдельный плагин. При любом изменении статуса заказа администратору придёт письмо.
Отслеживание обновлений в товарах и отправка уведомлений
Для уведомления о редактировании товара можно использовать хук woocommerce_update_product:
add_action('woocommerce_update_product', 'wpd_notify_admin_on_product_update', 10, 1);
function wpd_notify_admin_on_product_update($product_id) {
$product = wc_get_product($product_id);
$admin_email = get_option('admin_email');
$subject = "Товар \"" . $product->get_name() . "\" обновлён";
$message = "Товар с ID $product_id был обновлён.
Название: " . $product->get_name() . "
Цена: " . wc_price($product->get_price()) . "
Редактировать: " . admin_url('post.php?post=' . $product_id . '&action=edit');
wp_mail($admin_email, $subject, $message);
}
Проверка результата после внедрения
- Измените статус любого заказа в WooCommerce через админку.
- Проверьте почтовый ящик администратора — должно прийти письмо с деталями.
- Измените информацию о товаре (например, цену) и сохраните.
- Снова проверьте почту — уведомление об обновлении товара должно прийти.
- Для отладки можно временно добавить
error_logвнутри функций, чтобы убедиться, что они вызываются.
Частые ошибки и как их исправить
- Письма не приходят: проверьте настройки почты на сервере, используйте плагины типа WP Mail SMTP для диагностики.
- Хук не срабатывает: убедитесь, что код подключён корректно и нет конфликтов с другими плагинами.
- Письмо приходит пустым или без данных: проверьте правильность получения параметров в функции, используйте var_dump для отладки.
Практические советы по безопасности и производительности
- Не отправляйте уведомления на каждый чих — фильтруйте события по важности, чтобы не перегружать почтовый сервер.
- Используйте WP Cron для пакетной отправки уведомлений, если изменений много.
- Для безопасности не храните в письмах чувствительные данные, например, пароли или личную информацию.
- По возможности используйте SMTP-сервер для отправки почты, чтобы избежать попадания в спам.
Таблица сравнения способов реализации уведомлений об изменениях
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Хуки WooCommerce и WordPress | Лёгкая интеграция, гибкость, нет дополнительных плагинов | Требует знаний PHP, возможны конфликты | Использовать для простых уведомлений, при необходимости расширять |
| Плагины уведомлений (например, Better Notifications for WP) | Готовые шаблоны, визуальный интерфейс, поддержка разных событий | Дополнительная нагрузка, не всегда нужный функционал | Для пользователей без навыков кодирования |
| Внешние сервисы (Zapier, Integromat) | Мощная автоматизация, интеграция с почтой и мессенджерами | Стоимость, зависимость от сторонних сервисов | Для крупных проектов с большим числом интеграций |