В WordPress хуки — это мощный инструмент, позволяющий вмешиваться в процесс работы сайта без изменения исходного кода ядра. Особенно они полезны для автоматизации повторяющихся и рутинных задач, что облегчает поддержку и развитие проекта. В этой статье разберем, как использовать хуки в WordPress для автоматизации, приведем примеры кода и рекомендации по плагинам.
Что такое хуки в WordPress и зачем они нужны
Хуки — это события, на которые можно "подписаться" своим кодом. Существует два типа хуков: actions (действия) и filters (фильтры). Actions позволяют запускать функции в определенный момент, filters — изменять данные перед их выводом или сохранением.
Использование хуков позволяет:
- Автоматизировать изменения контента или метаданных при сохранении записей.
- Добавлять или изменять поведение административной панели.
- Выполнять задачи по расписанию или по событию.
- Интегрировать сторонние сервисы без изменения ядра.
Для работы достаточно знать имя хука и написать функцию, которая будет выполняться.
Автоматизация публикации и обработки записей с помощью хуков
Добавление метаданных при сохранении записи
Допустим, нужно при публикации записи автоматически добавлять мета-поле с датой и временем публикации в формате UNIX timestamp. Это удобно, если стандартного поля времени публикации недостаточно.
function wpbloger_add_custom_publish_timestamp($post_id) {
if (get_post_type($post_id) !== 'post') {
return;
}
if (get_post_status($post_id) === 'publish') {
update_post_meta($post_id, '_custom_publish_timestamp', time());
}
}
add_action('save_post', 'wpbloger_add_custom_publish_timestamp');Эта функция срабатывает при сохранении записи и добавляет/обновляет мета-поле. Таким образом, можно автоматизировать сбор дополнительных данных.
Автоматическое назначение категории
Если требуется, чтобы все новые записи автоматически попадали в определенную категорию, можно использовать такой код:
function wpbloger_set_default_category($post_id) {
if (get_post_type($post_id) !== 'post') return;
if (wp_is_post_revision($post_id)) return;
$default_cat = get_category_by_slug('news');
if (!$default_cat) return;
$categories = wp_get_post_categories($post_id);
if (empty($categories)) {
wp_set_post_categories($post_id, [$default_cat->term_id]);
}
}
add_action('save_post', 'wpbloger_set_default_category');Этот код проверяет, есть ли у записи категории, и если нет — присваивает категорию с ярлыком "news".
Автоматизация работы с пользователями и комментариями
Автоматическое отправление письма новым пользователям
Чтобы сразу после регистрации нового пользователя отправлять письмо с полезными инструкциями, можно использовать хук user_register:
function wpbloger_send_welcome_email($user_id) {
$user_info = get_userdata($user_id);
$to = $user_info->user_email;
$subject = 'Добро пожаловать на наш сайт!';
$message = 'Спасибо за регистрацию. Ознакомьтесь с нашими рекомендациями...';
wp_mail($to, $subject, $message);
}
add_action('user_register', 'wpbloger_send_welcome_email');Такой подход избавляет от необходимости вручную отправлять письма каждому новому пользователю.
Автоматическая модерация комментариев по ключевым словам
Для снижения спама можно автоматически помечать комментарии с определенными словами как ожидающие модерации:
function wpbloger_auto_moderate_comments($approved, $commentdata) {
$spam_words = ['viagra', 'casino', 'loan'];
foreach ($spam_words as $word) {
if (stripos($commentdata['comment_content'], $word) !== false) {
return '0'; // Ожидает модерации
}
}
return $approved;
}
add_filter('pre_comment_approved', 'wpbloger_auto_moderate_comments', 10, 2);Это позволит эффективно бороться со спамом без сторонних плагинов.
Плагины для автоматизации с помощью хуков
Хотя хуки дают большую гибкость, иногда проще использовать готовые решения. Вот несколько полезных плагинов:
- Code Snippets — удобный интерфейс для добавления своих функций с хуками без правки functions.php.
- WP Crontrol — позволяет управлять задачами по расписанию (cron), которые можно запускать через хуки.
- AutomatorWP — визуальный конструктор автоматизации с поддержкой хуков и триггеров.
Эти инструменты значительно упрощают создание и управление автоматизацией.
Использование хуков для планировщика задач и cron
Автоматизация часто требует запуска кода по расписанию. WordPress имеет встроенный планировщик (WP-Cron), который можно расширять с помощью хуков.
Пример: автоматическое удаление старых черновиков
Допустим, нужно раз в неделю удалять черновики старше 30 дней.
function wpbloger_delete_old_drafts() {
$args = [
'post_type' => 'post',
'post_status' => 'draft',
'date_query' => [
'before' => '30 days ago',
],
'fields' => 'ids',
'posts_per_page' => -1
];
$drafts = get_posts($args);
foreach ($drafts as $draft_id) {
wp_delete_post($draft_id, true);
}
}
function wpbloger_schedule_delete_old_drafts() {
if (!wp_next_scheduled('wpbloger_delete_old_drafts_hook')) {
wp_schedule_event(time(), 'weekly', 'wpbloger_delete_old_drafts_hook');
}
}
add_action('wp', 'wpbloger_schedule_delete_old_drafts');
add_action('wpbloger_delete_old_drafts_hook', 'wpbloger_delete_old_drafts');Этот код создает задачу, которая каждую неделю запускает функцию удаления старых черновиков.
Советы по отладке и безопасности при работе с хуками
При использовании хуков важно соблюдать несколько правил:
- Всегда проверяйте тип записей и статусы, чтобы избежать нежелательных действий.
- Используйте nonce и проверки прав пользователя при работе с пользовательским вводом.
- Логируйте действия при сложных автоматизациях для отладки.
- Не забывайте удалять задачи WP-Cron при деактивации плагинов или функций.
Следуя этим рекомендациям, вы сохраните стабильность и безопасность сайта.