Отслеживание пользовательских событий на сайте WordPress — важная задача для анализа поведения посетителей, улучшения интерфейса и увеличения конверсии. В этой статье рассмотрим, как реализовать собственное отслеживание событий с помощью REST API WordPress, сохраняя данные в базу и обрабатывая их для анализа. Это даст гибкость, не зависимую от сторонних сервисов и поможет лучше контролировать процесс.
Зачем создавать собственное отслеживание событий в WordPress
Использование сторонних сервисов аналитики, таких как Google Analytics, отлично подходит для большинства случаев. Но бывают задачи, когда:
- Необходимо отслеживать специфичные события, не поддерживаемые стандартными инструментами.
- Требуется хранить данные локально, чтобы соответствовать требованиям безопасности и конфиденциальности.
- Хотим реализовать кастомную логику обработки событий — например, запускать оповещения или интегрировать с плагинами.
В таких случаях создание собственного REST API для сохранения и обработки событий — правильное решение.
Создаем REST API эндпоинт для приема событий
Для начала создадим REST API маршрут, который будет принимать данные о событиях от фронтенда.
add_action('rest_api_init', function () {
register_rest_route('wpbest/v1', '/track-event', array(
'methods' => 'POST',
'callback' => 'wpbest_track_event_handler',
'permission_callback' => '__return_true',
));
});
function wpbest_track_event_handler(WP_REST_Request $request) {
$params = $request->get_json_params();
if (empty($params['event_name'])) {
return new WP_REST_Response(array('error' => 'Event name is required'), 400);
}
global $wpdb;
$table = $wpdb->prefix . 'wpbest_events';
$data = array(
'event_name' => sanitize_text_field($params['event_name']),
'event_data' => maybe_serialize($params['event_data'] ?? []),
'user_ip' => $_SERVER['REMOTE_ADDR'],
'created_at' => current_time('mysql'),
);
$format = array('%s', '%s', '%s', '%s');
$wpdb->insert($table, $data, $format);
return new WP_REST_Response(array('success' => true), 200);
}Этот код регистрирует маршрут /wp-json/wpbest/v1/track-event, который принимает POST-запрос с JSON-параметрами. Мы ожидаем обязательное поле event_name и опциональные данные события в event_data. Все данные сохраняются в отдельную таблицу базы.
Создание таблицы для хранения событий
Для работы необходимо создать таблицу в базе данных. Это можно сделать через активацию плагина или вручную:
function wpbest_create_events_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wpbest_events';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
event_name VARCHAR(100) NOT NULL,
event_data LONGTEXT NULL,
user_ip VARCHAR(45) NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY event_name_idx (event_name),
KEY created_at_idx (created_at)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpbest_create_events_table');Этот код создаст таблицу wpbest_events с необходимыми полями для хранения названия события, данных, IP пользователя и времени создания.
Отправка событий с фронтенда
Теперь настроим JavaScript, который будет отправлять данные событий на наш API. В WordPress лучше использовать enqueue и wp_localize_script для передачи URL REST API.
function wpbest_enqueue_scripts() {
wp_enqueue_script('wpbest-events', plugin_dir_url(__FILE__) . 'js/wpbest-events.js', array('jquery'), '1.0', true);
wp_localize_script('wpbest-events', 'wpbestData', array(
'restUrl' => esc_url_raw(rest_url('wpbest/v1/track-event')),
'nonce' => wp_create_nonce('wp_rest'),
));
}
add_action('wp_enqueue_scripts', 'wpbest_enqueue_scripts');Файл js/wpbest-events.js может содержать следующий код для отправки события:
function wpbestSendEvent(eventName, eventData = {}) {
fetch(wpbestData.restUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-WP-Nonce': wpbestData.nonce
},
body: JSON.stringify({
event_name: eventName,
event_data: eventData
})
})
.then(response => response.json())
.then(data => console.log('Event tracked:', data))
.catch(err => console.error('Tracking error:', err));
}
// Пример вызова отслеживания клика по кнопке
jQuery(document).ready(function($) {
$('#my-button').on('click', function() {
wpbestSendEvent('button_click', {button_id: 'my-button'});
});
});Обработка и анализ собранных событий
Данные теперь хранятся локально и могут быть использованы для анализа. Можно вывести статистику в админке WordPress, используя WP_List_Table или REST API для отображения на фронтенде.
Для примера создадим простую страницу в админке с подсчетом количества событий по типам:
function wpbest_events_admin_page() {
global $wpdb;
$table = $wpdb->prefix . 'wpbest_events';
$results = $wpdb->get_results("SELECT event_name, COUNT(*) as count FROM $table GROUP BY event_name ORDER BY count DESC");
echo '<div class="wrap"><h1>Статистика событий</h1><table class="widefat fixed"><thead><tr><th>Событие</th><th>Количество</th></tr></thead><tbody>';
foreach ($results as $row) {
echo '<tr><td>' . esc_html($row->event_name) . '</td><td>' . esc_html($row->count) . '</td></tr>';
}
echo '</tbody></table></div>';
}
function wpbest_add_admin_menu() {
add_menu_page('Отслеживание событий', 'Отслеживание событий', 'manage_options', 'wpbest-events', 'wpbest_events_admin_page');
}
add_action('admin_menu', 'wpbest_add_admin_menu');Этот код добавит в админ-панель пункт меню с простым списком количества каждого типа события.
Использование плагинов для расширения функционала
Если хочется избежать ручного создания решения, можно обратить внимание на плагины, которые расширяют REST API и упрощают сбор данных. Например, Clearfy Pro помогает оптимизировать работу сайта и управлять API запросами.
Для визуализации событий можно интегрировать данные с WPStories или использовать WPRemark для сбора отзывов и реакций, что тоже можно считать событием.
Безопасность и производительность
При работе с REST API важно соблюдать меры безопасности:
- Проверяйте и фильтруйте входящие данные.
- Используйте nonce для проверки запросов с фронтенда.
- Ограничивайте доступ к эндпоинтам, если это необходимо.
- Для больших объемов данных подумайте об асинхронной обработке и очистке старых записей.
Также не стоит хранить избыточные данные, чтобы не перегружать базу и не замедлять сайт.
Итоги
Создание собственного REST API для отслеживания событий в WordPress — мощный инструмент для гибкой аналитики и кастомных решений. Используя приведенные примеры, вы сможете адаптировать код под свои задачи, интегрировать сбор данных с фронтендом и создавать удобные отчеты в админке.
Для подробного изучения REST API в WordPress советую посмотреть официальную документацию и экспериментировать с собственными маршрутами и методами.