В 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, подстраивая процесс обновления под свои задачи.