Хуки и фильтры — основа расширяемости WordPress. Они позволяют вам вмешиваться в процесс выполнения без изменения исходного кода. В этой статье мы подробно разберём, как применять хуки и фильтры для автоматизации рутинных задач, улучшения функционала и повышения производительности сайта.
Что такое хуки и фильтры в WordPress: основы и различия
Хук (hook) — это точка в коде WordPress, где можно "зацепиться" для выполнения своей функции. Есть два типа хуков: action (действия) и filter (фильтры). Action-хуки позволяют выполнять код в определённый момент, а фильтры — изменять данные на лету.
Пример action-хука: add_action('init', 'wpskill_init_function'); — вызов функции при инициализации WordPress.
Пример filter-хука: add_filter('the_content', 'wpskill_modify_content'); — изменение содержимого поста перед выводом.
Знание этих механизмов позволяет создавать мощные решения без изменения ядра и плагинов.
Автоматизация задач с помощью action-хуков
Автоматическое добавление мета-данных при публикации
Рассмотрим, как при сохранении записи автоматически добавлять мета-данные, например, дату последнего редактирования в собственное поле.
function wpskill_add_last_edit_meta($post_id) {
if (wp_is_post_revision($post_id)) return;
update_post_meta($post_id, '_last_edit_date', current_time('mysql'));
}
add_action('save_post', 'wpskill_add_last_edit_meta');Этот код срабатывает при сохранении записи и обновляет мета-поле с текущей датой. Такой приём полезен для последующего отображения информации об актуальности контента.
Автоматическая отправка уведомлений при изменении записи
Автоматизируем отправку письма администратору, когда публикация переходит в статус "опубликована".
function wpskill_notify_admin_on_publish($new_status, $old_status, $post) {
if ('publish' === $new_status && 'publish' !== $old_status && $post->post_type === 'post') {
wp_mail(
get_option('admin_email'),
'Новая публикация на сайте',
'Публикация "' . $post->post_title . '" была опубликована.'
);
}
}
add_action('transition_post_status', 'wpskill_notify_admin_on_publish', 10, 3);Это избавит вас от необходимости вручную проверять новые посты и уведомлять заинтересованных лиц.
Использование фильтров для автоматической модификации данных
Автоматическое добавление подписи к контенту
Допустим, вы хотите добавить авторскую ссылку в конец каждого поста без редактирования контента вручную:
function wpskill_append_signature($content) {
if (is_single() && in_the_loop() && is_main_query()) {
$signature = '<p>Автор статьи: <a href="https://wpshop.ru/?utm_source=wpskill.ru&utm_medium=article&utm_campaign=kak-ispolzovat-hooki-filtery-wordpress-dlya-avtomatizacii" target="_blank">WPSkill</a></p>';
return $content . $signature;
}
return $content;
}
add_filter('the_content', 'wpskill_append_signature');Такой приём помогает поддерживать единый стиль и расширять информацию без лишних усилий.
Фильтрация пользовательских данных перед сохранением
Для защиты от нежелательных символов или форматирования можно фильтровать ввод пользователя, например, в комментариях:
function wpskill_filter_comment_text($comment_text) {
// Убираем лишние пробелы и запрещённые слова
$comment_text = trim($comment_text);
$bad_words = ['spamword1', 'spamword2'];
foreach ($bad_words as $word) {
$comment_text = str_ireplace($word, '', $comment_text);
}
return $comment_text;
}
add_filter('pre_comment_content', 'wpskill_filter_comment_text');Это помогает поддерживать чистоту контента и уменьшает количество спама.
Практические рекомендации и полезные плагины для работы с хуками
Плагины для упрощения работы с хуками
Если вы хотите увидеть, какие хуки срабатывают на странице, используйте плагин Query Monitor. Он покажет активные хуки, ошибки и запросы к базе.
Для визуального управления хуками и фильтрами пригодится Clearfy Pro — плагин оптимизации и управления, который позволяет отключать ненужные хуки и скрипты.
Советы по написанию функций для хуков и фильтров
- Всегда проверяйте тип данных и контекст, чтобы избежать ошибок.
- Используйте префиксы в названиях функций, например,
wpskill_, чтобы избежать конфликтов. - Не забывайте о приоритетах — порядок срабатывания хуков можно задавать третьим параметром в
add_actionиadd_filter. - Для сложных операций используйте отдельные классы и методы вместо глобальных функций.
Примеры комплексной автоматизации с хуками и фильтрами
Автоматическое создание превью с водяным знаком при загрузке изображений
С помощью фильтра wp_handle_upload можно добавить обработку файла сразу после загрузки.
function wpskill_add_watermark_to_image($upload) {
$file = $upload['file'];
$image_type = wp_check_filetype($file)['type'];
if (strpos($image_type, 'image') !== false) {
// Подключаем библиотеку для работы с изображениями
$image = wp_get_image_editor($file);
if (!is_wp_error($image)) {
$size = $image->get_size();
$watermark = imagecreatefrompng(__DIR__ . '/watermark.png');
$dest_image = $image->get_image();
// Получаем размеры и накладываем водяной знак (пример для GD)
imagecopy($dest_image, $watermark, $size['width'] - imagesx($watermark) - 10, $size['height'] - imagesy($watermark) - 10, 0, 0, imagesx($watermark), imagesy($watermark));
$image->set_image($dest_image);
$image->save($file);
}
}
return $upload;
}
add_filter('wp_handle_upload', 'wpskill_add_watermark_to_image');Это пример расширенного использования фильтров для автоматизации графической обработки.
Автоматическое обновление пользовательских полей при смене статуса записи
Можно связать хуки для автоматического обновления мета-данных, например, менять статус обработки заказа в WooCommerce:
function wpskill_update_order_meta_on_status_change($order_id, $old_status, $new_status) {
if ($new_status === 'completed') {
update_post_meta($order_id, '_order_processed_date', current_time('mysql'));
}
}
add_action('woocommerce_order_status_changed', 'wpskill_update_order_meta_on_status_change', 10, 3);Так вы систематизируете данные и облегчите дальнейший анализ.
Заключение
Хуки и фильтры — мощный инструмент, когда нужно автоматизировать задачи в WordPress. Они позволяют создавать чистый, масштабируемый код без вмешательства в ядро. Используйте их для автоматического добавления данных, уведомлений, модификации контента и многого другого. Для удобства и безопасности всегда применяйте префиксы и тестируйте код на тестовом сайте.