Хуки (actions и filters) — это одна из самых мощных возможностей WordPress, позволяющая внедрять свой функционал в ядро и плагины без правки их кода. В этой статье мы подробно разберем, как использовать хуки для автоматизации различных задач на вашем сайте, приведем примеры кода и разберем лучшие практики.
Что такое хуки WordPress: actions и filters
WordPress предоставляет два основных типа хуков: actions и filters. Actions — это точки в коде, где можно выполнить дополнительный код. Filters — это точки, где можно изменить данные перед их выводом или сохранением.
Например, action wp_footer позволяет добавить код в футер сайта, а filter the_content позволяет изменять содержимое поста перед выводом.
Использование хуков — это лучший способ расширить функциональность сайта, сохраняя возможность обновлять WordPress и плагины без потери изменений.
Автоматизация публикации постов с помощью action-хуков
Одна из частых задач — автоматическое добавление метаданных или изменение статуса поста при публикации. Для этого можно использовать action-хук publish_post или более универсальный save_post.
Например, добавим автоматическую установку пользовательского поля при публикации:
function wpdemo_auto_set_meta_on_publish($post_id) {
// Проверяем тип поста и права
if (get_post_type($post_id) !== 'post') return;
if (wp_is_post_revision($post_id)) return;
// Устанавливаем метаполе
update_post_meta($post_id, '_wpdemo_auto_meta', 'published');
}
add_action('publish_post', 'wpdemo_auto_set_meta_on_publish');
Таким образом, при публикации поста автоматически добавится метаданные, которые можно использовать в шаблонах или для фильтрации.
Фильтрация и изменение содержимого с помощью filter-хуков
Фильтры позволяют изменять содержимое перед выводом. Например, можно автоматически добавлять сноску или предупреждение в конец каждого поста.
Пример добавления текста в конец контента:
function wpdemo_append_text_to_content($content) {
if (is_singular('post')) {
$content .= '<p><em>Спасибо за прочтение!</em></p>';
}
return $content;
}
add_filter('the_content', 'wpdemo_append_text_to_content');
Такая автоматизация помогает быстро добавлять важную информацию без правки шаблонов.
Пример автоматического создания резервной копии базы данных при сохранении поста
Автоматизация рутинных задач — ключ к стабильности сайта. Рассмотрим пример: при сохранении любого поста будет запускаться создание резервной копии базы данных.
Для этого используем action save_post. Ниже упрощенный пример функции, которая сохраняет дамп базы в папку uploads/wp-backup:
function wpdemo_backup_db_on_save_post($post_id) {
if (wp_is_post_revision($post_id)) return;
global $wpdb;
$upload_dir = wp_upload_dir();
$backup_dir = $upload_dir['basedir'] . '/wp-backup/';
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
$filename = $backup_dir . 'backup-' . date('Y-m-d-H-i-s') . '.sql';
// Команда mysqldump требует настроек, здесь пример через exec
$db_host = DB_HOST;
$db_name = DB_NAME;
$db_user = DB_USER;
$db_pass = DB_PASSWORD;
$command = "mysqldump --host=$db_host --user=$db_user --password=$db_pass $db_name > $filename";
exec($command);
}
add_action('save_post', 'wpdemo_backup_db_on_save_post');
Обратите внимание, что для выполнения команды exec на сервере должны быть соответствующие права и установлен mysqldump. В реальных проектах лучше использовать специальные плагины или классы для резервного копирования.
Использование хуков для интеграции плагина Clearfy Pro и оптимизации сайта
Если на сайте установлен плагин Clearfy Pro, можно использовать его API вместе с хуками для автоматического включения или отключения модулей в зависимости от условий.
Пример отключения XML-RPC при сохранении настроек:
function wpdemo_clearfy_disable_xmlrpc($option_name, $old_value, $value) {
if ($option_name === 'clearfy_disable_xmlrpc' && $value) {
remove_action('xmlrpc_call', 'some_xmlrpc_handler');
}
}
add_action('update_option', 'wpdemo_clearfy_disable_xmlrpc', 10, 3);
Так можно гибко настраивать поведение плагина в зависимости от бизнес-логики.
Советы по работе с хуками для автоматизации
- Проверяйте условия вызова — добавляйте проверки типа поста, прав пользователя, чтобы код не выполнялся в ненужных местах.
- Избегайте тяжелых операций в хуках, которые вызываются часто, например, на каждом запросе. Для таких задач лучше использовать WP-Cron.
- Используйте префиксы в названиях функций, чтобы избежать конфликтов с другими плагинами.
- Логируйте действия во время разработки, чтобы отследить выполнение своих функций.
- Тестируйте на локальной копии сайта, чтобы избежать ошибок на рабочем ресурсе.
Как найти нужный хук
Используйте официальную справку по хукам WordPress. Там подробно описаны все доступные хуки, их параметры и места вызова.
Также можно использовать плагины типа Query Monitor для отслеживания хуков, которые срабатывают на странице.
Пример создания своего action-хука для расширения плагина
Если вы пишете плагин и хотите, чтобы другие могли расширять его функционал, создайте собственный хук:
function wpdemo_plugin_process_data($data) {
/**
* Хук для обработки данных плагина
*
* @param array $data
* @return array
*/
return apply_filters('wpdemo_plugin_process_data', $data);
}
// В другом месте темы или плагина
add_filter('wpdemo_plugin_process_data', function($data) {
$data['added_by_hook'] = true;
return $data;
});
Так вы обеспечите расширяемость и гибкость своего кода.
Заключение
Хуки — основа автоматизации и расширения WordPress. Понимание как и когда их использовать позволяет создавать гибкие и удобные решения под любые задачи. В этой статье мы рассмотрели практические примеры работы с actions и filters, добавления метаданных, автоматизации резервного копирования, интеграции с плагинами и создания собственных хуков. Используйте эти знания для улучшения своих проектов на WordPress.