WooCommerce: использование хука woocommerce_ajax_add_order_note для дополнительной обработки заказов

Что такое хук 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
Готовые плагины для заметок и уведомленийПростота установки, поддержка разработчикаМожет нагружать сайт, не всегда подходит под специфичные задачи
⭐⭐⭐⭐⭐