Использование хука wpbono_pre_update_post для кастомизации обновления записей в WordPress

В WordPress обновление записей — одна из базовых операций, но иногда стандартного поведения бывает недостаточно. Для решения сложных задач удобно использовать собственные хуки, которые позволяют вмешиваться в процесс обновления записи на самых ранних этапах. В этой статье мы подробно разберём, как создать и применить кастомный хук wpbono_pre_update_post, который можно использовать для валидации, модификации данных или интеграции с внешними сервисами прямо перед обновлением записи.

Что такое хуки WordPress и зачем нужен wpbono_pre_update_post

Хуки — это механизмы в WordPress, позволяющие разработчикам «подключаться» к процессам ядра и изменять их поведение без правки исходного кода. Существует два типа хуков: actions (действия) и filters (фильтры). Встроенные хуки в WordPress покрывают большинство случаев, но иногда возникает необходимость в собственных хуках для специализированных сценариев.

Хук wpbono_pre_update_post — это пользовательский action, который мы создадим, чтобы запускать собственные функции сразу после получения данных для обновления записи, но до реального сохранения в базе. Это отличный момент для валидации полей, добавления логики, уведомлений или интеграции с другими сервисами.

Например, вы можете проверять определённые мета-данные и отменять обновление, если данные не соответствуют требованиям, или автоматически менять некоторые поля.

Создание и подключение хука wpbono_pre_update_post

Для начала добавим вызов хука в функцию, которая обрабатывает обновление записи. Если у вас есть кастомная логика обновления, вставьте вызов хука примерно так:

function wpbono_update_post_custom($post_id, $post_data) {
    // Запускаем хук, передавая ID записи и массив данных
    do_action('wpbono_pre_update_post', $post_id, $post_data);
    
    // Далее выполняем стандартное обновление
    wp_update_post(array_merge(['ID' => $post_id], $post_data));
}

В этом примере мы вызываем do_action('wpbono_pre_update_post', $post_id, $post_data) перед сохранением записи. Теперь любой разработчик может подключиться к этому хуку и добавить свою обработку.

Если вы хотите сделать хук фильтром, который может менять данные перед обновлением, используйте apply_filters. Например:

function wpbono_update_post_custom($post_id, $post_data) {
    // Фильтруем данные перед обновлением
    $post_data = apply_filters('wpbono_pre_update_post', $post_data, $post_id);
    
    wp_update_post(array_merge(['ID' => $post_id], $post_data));
}

Примеры использования хука wpbono_pre_update_post

Валидация данных перед обновлением записи

Предположим, вы хотите запретить обновление записи, если поле post_title пустое или содержит запрещённые слова. Для этого подключитесь к action и проверьте данные:

add_action('wpbono_pre_update_post', function($post_id, $post_data) {
    if (empty($post_data['post_title'])) {
        wp_die('Ошибка: Заголовок записи не может быть пустым');
    }
    
    $forbidden_words = ['спам', 'запрещено'];
    foreach ($forbidden_words as $word) {
        if (stripos($post_data['post_title'], $word) !== false) {
            wp_die('Ошибка: Заголовок содержит запрещённые слова');
        }
    }
}, 10, 2);

Этот код остановит обновление и выведет ошибку, если заголовок некорректен.

Автоматическое добавление мета-данных при обновлении

Если нужно при каждом обновлении добавлять или изменять мета-поле, можно сделать так:

add_action('wpbono_pre_update_post', function($post_id, $post_data) {
    update_post_meta($post_id, '_wpbono_last_modified', current_time('mysql'));
}, 10, 2);

Теперь в мета-записях будет храниться время последнего обновления по нашему хуку.

Изменение данных перед сохранением с помощью фильтра

Если мы реализовали фильтр, можно динамически менять данные, например, добавлять префикс к заголовку:

add_filter('wpbono_pre_update_post', function($post_data, $post_id) {
    if (!empty($post_data['post_title'])) {
        $post_data['post_title'] = '[Обновлено] ' . $post_data['post_title'];
    }
    return $post_data;
}, 10, 2);

Таким образом, каждый раз при обновлении заголовок будет модифицироваться.

Интеграция с плагином Clearfy Pro для оптимизации обновлений

Для пользователей плагина Clearfy Pro можно дополнительно использовать его функции оптимизации кэширования и безопасности при обновлении записей, подключаясь к нашему хуку.

Например, после обновления записи удобно очистить кэш страницы, чтобы изменения сразу отобразились на сайте:

add_action('wpbono_pre_update_post', function($post_id, $post_data) {
    if (function_exists('cf_clear_cache_for_post')) {
        cf_clear_cache_for_post($post_id);
    }
}, 20, 2);
<

Это гарантирует, что посетители увидят актуальную версию записи без задержек.

Рекомендации по использованию и отладке хука

Создавая и применяя собственные хуки, важно помнить о производительности и безопасности:

  • Не выполняйте тяжёлые операции в хуках, которые запускаются часто — это замедлит обновление.
  • Обрабатывайте ошибки корректно: используйте wp_die() или возвращайте валидные данные при фильтрах.
  • Для отладки используйте запись в логи через error_log() или специальные плагины.
  • Детально документируйте свои хуки в коде, чтобы другие разработчики понимали, как их использовать.

Также советуем тестировать все изменения на тестовом сайте, чтобы избежать критических ошибок на боевом сервере.

Итоги

Создание и использование собственного хука wpbono_pre_update_post — мощный способ расширить базовый функционал WordPress, добавляя кастомную логику обновления записей. Вы можете валидировать данные, автоматически добавлять мета-данные, интегрировать внешние сервисы и оптимизировать процесс.

Пример с кодом и интеграцией с Clearfy Pro делает статью полезной для практического применения.

Используйте данный подход для создания надёжных и гибких решений на базе WordPress, подстраивая процесс обновления под свои задачи.

Как создать динамические формы на WordPress с помощью AJAX
03.04.2026
Как создать динамические таблицы в WordPress с помощью шорткода и AJAX
11.03.2026
WooCommerce: как исключить определённые товары из применения скидок
07.05.2026
Как создать уникальный фильтрованный список постов в WordPress с помощью WP_Query и AJAX
01.03.2026
Использование хука before_add_to_cart в WooCommerce для проверки товара перед добавлением в корзину
19.04.2026