Отслеживание активности пользователей на сайте WordPress — важная задача для анализа поведения, улучшения интерфейса и персонализации контента. В этой статье мы разберём, как реализовать простое, но эффективное отслеживание пользователей с помощью AJAX-запросов. Такой подход позволит собирать данные без перезагрузки страницы, что улучшит пользовательский опыт и снизит нагрузку на сервер.
Зачем нужно отслеживание пользователей в WordPress и какие данные собирать
Отслеживание в WordPress помогает понять, какие страницы и разделы наиболее популярны, как долго пользователи остаются на сайте, какие действия выполняют и откуда пришли. Обычно собирают следующие данные:
- ID пользователя или IP (если гость);
- URL посещённой страницы;
- Время посещения;
- Тип действия (например, просмотр страницы, клик по кнопке);
- Дополнительные параметры (например, UTM-метки, реферер).
Для реализации базового отслеживания достаточно записывать идентификатор пользователя, URL и время. Это позволит создавать отчёты и анализировать поведение.
Подключение AJAX в WordPress: базовые понятия и настройка
WordPress имеет встроенный механизм AJAX, который работает через файл admin-ajax.php. Чтобы использовать AJAX, нужно зарегистрировать обработчик на сервере и настроить JavaScript на клиенте для отправки запросов.
Для начала подключим JavaScript-файл и передадим ему адрес AJAX:
function wporg_enqueue_scripts() {
wp_enqueue_script('wporg-tracking', get_template_directory_uri() . '/js/tracking.js', ['jquery'], null, true);
wp_localize_script('wporg-tracking', 'wporg_ajax_obj', [
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wporg_nonce')
]);
}
add_action('wp_enqueue_scripts', 'wporg_enqueue_scripts');В этом примере мы подключаем скрипт tracking.js из папки темы и передаём ему AJAX URL и nonce для безопасности.
Обработка AJAX-запроса на сервере
Далее регистрируем PHP-функцию, которая будет обрабатывать AJAX-запросы. В WordPress есть два действия: для авторизованных пользователей и для гостей.
function wporg_handle_user_tracking() {
check_ajax_referer('wporg_nonce', 'security');
$user_id = get_current_user_id();
$page_url = isset($_POST['page_url']) ? sanitize_text_field($_POST['page_url']) : '';
$timestamp = current_time('mysql');
global $wpdb;
$table = $wpdb->prefix . 'wporg_user_tracking';
$wpdb->insert($table, [
'user_id' => $user_id,
'page_url' => $page_url,
'visited_at' => $timestamp
]);
wp_send_json_success('Tracking saved');
}
add_action('wp_ajax_wporg_track_user', 'wporg_handle_user_tracking');
add_action('wp_ajax_nopriv_wporg_track_user', 'wporg_handle_user_tracking');Здесь происходит проверка nonce, получение ID пользователя, URL страницы и запись в базу данных. Если пользователь не авторизован, ID будет 0.
Создание собственной таблицы в базе данных для хранения данных отслеживания
Для хранения данных создадим отдельную таблицу. Это позволит оптимизировать запросы и не нагружать стандартные таблицы WordPress.
Добавим функцию для создания таблицы при активации темы или плагина:
function wporg_create_tracking_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wporg_user_tracking';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
user_id bigint(20) unsigned NOT NULL DEFAULT 0,
page_url varchar(255) NOT NULL,
visited_at datetime NOT NULL,
PRIMARY KEY (id),
KEY user_id (user_id),
KEY visited_at (visited_at)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'wporg_create_tracking_table');Эта таблица хранит ID записи, ID пользователя, URL посещённой страницы и время посещения. Индексы по user_id и visited_at ускоряют выборки.
Клиентский JavaScript: отправка данных с помощью AJAX
Создадим скрипт tracking.js, который будет отправлять AJAX-запрос при загрузке страницы:
jQuery(document).ready(function($) {
var data = {
action: 'wporg_track_user',
security: wporg_ajax_obj.nonce,
page_url: window.location.href
};
$.post(wporg_ajax_obj.ajax_url, data, function(response) {
if(response.success) {
console.log('Пользователь отслежен');
} else {
console.log('Ошибка отслеживания');
}
});
});При загрузке страницы скрипт отправляет URL на сервер, где данные сохраняются. Вы можете расширить этот код для отслеживания других событий — кликов, прокрутки и т.д.
Дополнительные рекомендации и улучшения для отслеживания в WordPress
Чтобы сделать отслеживание более полезным и безопасным, рекомендуем:
- Добавить обработку ошибок и логирование для отладки.
- Фильтровать и валидировать входящие данные.
- Внедрить ограничение частоты запросов (throttling) для снижения нагрузки.
- Использовать пользовательские куки или localStorage для более точного определения сессий.
- Оптимизировать запросы и периодически очищать устаревшие данные из таблицы.
Если хотите собирать более сложные метрики (например, время на странице, глубина прокрутки), можно расширить JavaScript и серверный код, добавляя дополнительные AJAX-запросы при определённых событиях.
Пример расширения: отслеживание кликов на кнопки
Добавим пример, как отслеживать клики на определённые кнопки:
jQuery(document).ready(function($) {
$('.track-click').on('click', function() {
var data = {
action: 'wporg_track_user',
security: wporg_ajax_obj.nonce,
page_url: window.location.href + ' #button_click',
};
$.post(wporg_ajax_obj.ajax_url, data);
});
});Кнопкам, которые нужно отслеживать, добавьте класс track-click. При клике будет отправлен AJAX-запрос с пометкой о действии. На сервере можно расширить логику для сохранения типа действия.