Для сайта на WordPress, особенно если вы занимаетесь мониторингом его состояния и функциональности, полезно уметь регистрировать собственные события. Это позволяет отслеживать специфичные действия на сайте, которые нельзя увидеть через стандартные логи или плагины. В этой статье подробно разберём, как создавать и использовать собственные события в WordPress, чтобы повысить эффективность мониторинга и диагностики.
Что такое собственные события в WordPress и зачем они нужны
WordPress из коробки предоставляет множество хуков и событий, но иногда требуется отследить уникальные действия, например, пользовательские взаимодействия или изменения данных, которые не отслеживаются стандартными средствами. Собственные события позволяют:
- Фиксировать важные для вас действия;
- Создавать отчёты по специфичным событиям;
- Подключать внешние системы мониторинга и аналитики;
- Автоматизировать реакции на определённые события.
Для этого можно использовать несколько подходов: кастомные хуки, запись в пользовательские таблицы базы данных, интеграция с системами логирования.
Регистрация и вызов собственных событий через do_action и add_action
В WordPress можно определить собственный хук, используя функцию do_action в нужном месте кода. Другие части сайта или плагины могут на него подписаться через add_action.
Пример регистрации события с префиксом wpmonitor_:
function wpmonitor_do_custom_event($user_id, $event_data) {
do_action('wpmonitor_custom_event', $user_id, $event_data);
}
Подписка на событие:
add_action('wpmonitor_custom_event', 'wpmonitor_handle_custom_event', 10, 2);
function wpmonitor_handle_custom_event($user_id, $event_data) {
// Здесь можно записать событие в лог или базу данных
error_log("Custom event for user {$user_id}: " . print_r($event_data, true));
}
Вызов события в нужном месте кода:
wpmonitor_do_custom_event(get_current_user_id(), ['action' => 'viewed_page', 'page_id' => 123]);
Такой подход гибкий и хорошо интегрируется с остальной системой WordPress.
Запись собственных событий в базу данных для последующего анализа
Для более серьёзного мониторинга целесообразно сохранять события в отдельной таблице базы данных. Это позволит строить отчёты и использовать сложные запросы.
Создадим таблицу при активации плагина или темы:
function wpmonitor_create_events_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmonitor_events';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
event_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
user_id bigint(20) unsigned NOT NULL,
event_name varchar(100) NOT NULL,
event_data text NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpmonitor_create_events_table');
Функция записи события в таблицу:
function wpmonitor_log_event($user_id, $event_name, $event_data) {
global $wpdb;
$table_name = $wpdb->prefix . 'wpmonitor_events';
$wpdb->insert(
$table_name,
[
'user_id' => $user_id,
'event_name' => $event_name,
'event_data' => maybe_serialize($event_data),
'event_time' => current_time('mysql', 1),
]
);
}
Интегрируем запись в обработчик события:
add_action('wpmonitor_custom_event', function($user_id, $event_data) {
wpmonitor_log_event($user_id, 'custom_event', $event_data);
}, 10, 2);
Использование плагинов для расширенного мониторинга событий
Если не хочется писать всё с нуля, можно использовать плагины с расширенными возможностями логирования и мониторинга. Вот несколько полезных:
- Clearfy Pro — оптимизация и контроль безопасности с возможностью мониторинга действий;
- WPRemark — расширенное комментирование и фиксация активности пользователей;
- Expert Review — детальный аудит и отчёты по активности.
Эти решения можно дополнить своими собственными событиями для максимально точного мониторинга.
Практические советы по использованию собственных событий для мониторинга
При внедрении собственного мониторинга учитывайте следующие моменты:
- Выбирайте уникные префиксы для своих событий, чтобы избежать конфликтов с другими плагинами.
- Не записывайте слишком много данных без нужды — это замедлит работу сайта и может привести к переполнению базы.
- Регулярно очищайте или архивируйте старые записи событий.
- Используйте асинхронные методы записи или очереди, чтобы не блокировать работу сайта.
- Тестируйте обработчики на предмет ошибок и производительности.
Например, для асинхронной записи событий можно использовать WP-Cron или сторонние очереди.
Пример интеграции собственного события с WP-Cron для отложенной обработки
Чтобы не нагружать сайт при записи событий, можно отложить их обработку. Пример:
function wpmonitor_schedule_event_processing($user_id, $event_data) {
wp_schedule_single_event(time() + 60, 'wpmonitor_process_event_cron', [$user_id, $event_data]);
}
add_action('wpmonitor_process_event_cron', 'wpmonitor_handle_cron_event', 10, 2);
function wpmonitor_handle_cron_event($user_id, $event_data) {
wpmonitor_log_event($user_id, 'cron_custom_event', $event_data);
}
// Вызов
wpmonitor_schedule_event_processing(get_current_user_id(), ['action' => 'delayed_event']);
Так вы разгружаете рабочий процесс сайта, отправляя задачи на выполнение в фоновом режиме.