Что такое хук woocommerce_ajax_add_order_note и зачем он нужен
В WooCommerce при добавлении заметки к заказу в админке срабатывает AJAX-запрос, который вызывает хук woocommerce_ajax_add_order_note. Этот хук позволяет выполнить дополнительную логику сразу после добавления заметки к заказу, например, отправить уведомление, обновить метаданные заказа или выполнить кастомные проверки.
Использование этого хука актуально, если нужно расширить стандартные возможности WooCommerce без изменения ядра и плагинов.
Диагностика задачи: когда нужен этот хук
Типичные сценарии использования:
- Автоматическая отправка писем или уведомлений после добавления заметки.
- Логирование действий оператора или пользователя.
- Обновление статусов или метаданных в зависимости от содержания заметки.
Если при добавлении заметки заказу по AJAX нужна дополнительная логика, именно сюда стоит подключать свой код.
Пошаговое решение: как использовать woocommerce_ajax_add_order_note
1. Создание функции-обработчика
Добавьте следующий код в файл functions.php вашей дочерней темы или в кастомный плагин:
add_action('woocommerce_ajax_add_order_note', 'custom_after_add_order_note', 10, 2);
function custom_after_add_order_note($order_id, $note)
{
// Проверяем, что у нас есть ID заказа и текст заметки
if (!$order_id || empty($note)) {
return;
}
// Получаем объект заказа
$order = wc_get_order($order_id);
if (!$order) {
return;
}
// Пример: добавим пользовательское мета с временной меткой
update_post_meta($order_id, '_last_note_added_time', current_time('mysql'));
// Пример: логируем заметку в файл для отладки
error_log("Заметка добавлена к заказу #{$order_id}: {$note}");
// Здесь можно добавить любую дополнительную логику
}2. Проверка работы
Перейдите в админку WooCommerce, откройте любой заказ и добавьте заметку в блок "Заметки к заказу". После добавления:
- Проверьте файл
debug.log(если включено логирование ошибок PHP), в нем должна быть запись с текстом заметки. - Проверьте метаданные заказа через базу данных или с помощью плагина типа "WP phpMyAdmin" — должно появиться поле
_last_note_added_timeс текущей датой и временем.
Частые ошибки при использовании woocommerce_ajax_add_order_note
- Ошибка: функция не срабатывает
Причина: неверное имя хука или приоритет. Убедитесь, что вы используете именноwoocommerce_ajax_add_order_noteи что функция подключена черезadd_actionбез опечаток. - Ошибка: не передаются параметры
Проверьте, что у вас вadd_actionуказан аргумент2(количество параметров), иначе функция не получит$order_idи$note. - Ошибка: невозможность получить объект заказа
Иногдаwc_get_order($order_id)возвращаетfalse. Проверьте, что заказ существует и ID передается корректно.
Проверка результата после внедрения
Для тестирования включите WP_DEBUG и WP_DEBUG_LOG в wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);После добавления заметки перейдите в папку wp-content и откройте файл debug.log. Там должна появиться запись с вашим логом.
Также проверьте метаданные заказа через админку или базу данных, используя SQL-запрос:
SELECT meta_key, meta_value FROM wp_postmeta WHERE post_id = {ID_заказа} AND meta_key = '_last_note_added_time';Практические советы по безопасности и производительности
- Не выполняйте тяжелую обработку напрямую в хук — лучше запускать асинхронные задачи, например, через WP-Cron или очередь.
- Проверяйте права пользователя, который добавляет заметку, если от этого зависит безопасность данных (например,
current_user_can('edit_shop_orders')). - Избегайте вывода данных напрямую в AJAX-обработчиках, чтобы не нарушать формат ответа WooCommerce.
- Логируйте только важные события, чтобы не раздувать
debug.log.
Альтернативы: использование плагинов vs. собственный код
| Метод | Плюсы | Минусы |
|---|---|---|
| Кастомный код с хуком | Гибкость, контроль, не зависит от сторонних плагинов | Требует навыков, возможные ошибки при обновлениях WooCommerce |
| Готовые плагины для заметок и уведомлений | Простота установки, поддержка разработчика | Может нагружать сайт, не всегда подходит под специфичные задачи |