В WordPress хуки (actions и filters) — мощный инструмент, который позволяет разработчикам «подключаться» к процессам системы и расширять её функционал без изменения ядра. Одной из частых задач является отслеживание пользовательских действий: вход в систему, публикация поста, изменение профиля и другие события. В этой статье подробно разберём, как именно использовать хуки для фиксации таких событий, с примерами кода и полезными советами.
Что такое хуки и зачем они нужны для отслеживания действий
Хуки — это точки расширения в коде WordPress, где можно «подцепить» свою функцию. Существует два основных типа хуков:
- Action hooks (действия) — позволяют выполнять свой код в определённый момент.
- Filter hooks (фильтры) — позволяют изменить данные, перед тем как они будут использованы.
Для отслеживания пользовательских действий чаще всего используют action hooks, которые срабатывают при событиях в системе.
Например, когда пользователь входит в админку или публикует запись, WordPress запускает определённые хуки — мы можем подключиться к ним и записать информацию в лог, отправить уведомление или выполнить другую задачу.
Основные хуки для отслеживания действий пользователей в WordPress
Ниже перечислены популярные хуки для фиксации самых распространённых действий:
wp_login— срабатывает при успешном входе пользователя.user_register— при регистрации нового пользователя.profile_update— при обновлении профиля.save_post— при создании или обновлении записи.delete_post— при удалении записи.wp_logout— при выходе пользователя из системы.
Используя эти хуки, можно реализовать практически любое отслеживание действий.
Пример: запись действий пользователей в отдельный лог-файл
Рассмотрим пример, как через хуки вести лог успешных входов, обновлений профиля и публикаций постов. Для этого создадим функции, обрабатывающие соответствующие хуки, и запишем данные в файл wp-content/user-actions.log.
function wptem_log_user_login($user_login, $user) {
$log = date('Y-m-d H:i:s') . " - User login: " . $user_login . " (ID: " . $user->ID . ")\n";
error_log($log, 3, WP_CONTENT_DIR . '/user-actions.log');
}
add_action('wp_login', 'wptem_log_user_login', 10, 2);
function wptem_log_profile_update($user_id, $old_user_data) {
$log = date('Y-m-d H:i:s') . " - Profile updated: User ID " . $user_id . "\n";
error_log($log, 3, WP_CONTENT_DIR . '/user-actions.log');
}
add_action('profile_update', 'wptem_log_profile_update', 10, 2);
function wptem_log_save_post($post_id, $post, $update) {
if ($post->post_type !== 'post') return;
$action = $update ? 'Updated' : 'Created';
$log = date('Y-m-d H:i:s') . " - Post " . $action . ": ID " . $post_id . ", Title: " . $post->post_title . "\n";
error_log($log, 3, WP_CONTENT_DIR . '/user-actions.log');
}
add_action('save_post', 'wptem_log_save_post', 10, 3);
Этот код создаёт три функции, которые записывают в лог время и описание события. Файл user-actions.log будет храниться в папке wp-content. Такой подход позволяет быстро получать данные о ключевых действиях на сайте.
Расширение функционала: уведомления и интеграция с плагинами
Помимо логирования, можно отправлять уведомления администратору при важных событиях. Например, интегрировать с почтовой системой WordPress через функцию wp_mail():
function wptem_notify_admin_on_new_user($user_id) {
$user_info = get_userdata($user_id);
$to = get_option('admin_email');
$subject = 'Новый пользователь зарегистрирован';
$message = 'Пользователь ' . $user_info->user_login . ' (' . $user_info->user_email . ') только что зарегистрировался на сайте.';
wp_mail($to, $subject, $message);
}
add_action('user_register', 'wptem_notify_admin_on_new_user');
Также можно расширить возможности с помощью плагинов для мониторинга активности, например, Clearfy Pro, который включает инструменты для оптимизации и безопасности, частично покрывающие задачи аудита.
Советы по безопасности и производительности при работе с хуками
При добавлении логики на хуки важно не забывать про производительность. Логирование и отправка писем — операции, которые могут замедлить работу сайта, если выполняются прямо в процессе загрузки страницы.
Рекомендуется:
- Использовать асинхронные задачи или очередь (через WP-Cron или сторонние сервисы).
- Минимизировать количество операций в хуках.
- Проверять права пользователя, чтобы не записывать лишние события.
- Ограничивать размер логов и регулярно их чистить.
Например, для асинхронного логирования можно использовать плагин WPRemark, который позволяет удобно работать с отзывами и логами, или самостоятельно реализовать очередь с WP-Cron.
Заключение: как выбрать и реализовать отслеживание
Подход к отслеживанию действий зависит от целей сайта. Если нужно просто фиксировать входы и изменения, достаточно базовых хуков и логирования в файл. Если требуется аналитика и уведомления — стоит расширить функционал отправкой писем или интеграцией с внешними системами.
В любом случае, знание, как правильно использовать хуки, позволяет гибко решать задачи мониторинга и улучшать контроль над сайтом.