Зачем нужен плагин для контроля изменений в WordPress
Ведение точного учёта изменений на сайте — важная задача для администраторов и разработчиков. Это помогает быстро выявлять причины возможных проблем, отслеживать действия пользователей и анализировать, какие изменения были внесены в контент или настройки. Особенно это важно для крупных проектов с несколькими редакторами и администраторами.
Хотя существуют готовые решения, создание собственного плагина даёт полное понимание логики работы и возможность тонкой настройки под конкретные нужды. В этой статье мы подробно рассмотрим, как создать простой, но функциональный плагин для контроля изменений в WordPress.
Основные задачи плагина контроля изменений
Плагин должен фиксировать ключевые события, такие как:
- Создание, обновление и удаление записей и страниц.
- Изменения в пользовательских метаданных и настройках.
- Авторизацию и действия пользователей с правами администратора и редактора.
Также желательно предоставить удобный интерфейс для просмотра лога изменений прямо в админке WordPress.
Создание структуры плагина
Начнём с создания базового файла плагина wpapp-change-tracker.php в папке wp-content/plugins/wpapp-change-tracker:
<?php
/**
* Plugin Name: WPApp Change Tracker
* Description: Плагин для контроля и логирования изменений на сайте WordPress
* Version: 1.0
* Author: WPApp.ru
*/
// Защита от прямого запуска файла
if (!defined('ABSPATH')) {
exit;
}
// Подключение основных функций
require_once plugin_dir_path(__FILE__) . 'includes/wpapp-change-tracker-functions.php';Создайте папку includes и файл wpapp-change-tracker-functions.php для основной логики.
Логирование изменений записей и страниц
Для отслеживания изменений публикаций используем хуки WordPress save_post и before_delete_post. В файле wpapp-change-tracker-functions.php добавим следующий код:
function wpappct_log_post_change($post_id, $post, $update) {
// Игнорируем авто-сохранения и ревизии
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
return;
}
$user = wp_get_current_user();
$action = $update ? 'Обновление' : 'Создание';
$message = sprintf('%s записи: ID %d, заголовок "%s", автор: %s', $action, $post_id, $post->post_title, $user->user_login);
wpappct_write_log($message);
}
add_action('save_post', 'wpappct_log_post_change', 10, 3);
function wpappct_log_post_delete($post_id) {
$user = wp_get_current_user();
$message = sprintf('Удаление записи: ID %d, автор: %s', $post_id, $user->user_login);
wpappct_write_log($message);
}
add_action('before_delete_post', 'wpappct_log_post_delete');
function wpappct_write_log($message) {
global $wpdb;
$table = $wpdb->prefix . 'wpapp_changes_log';
$wpdb->insert(
$table,
[
'time' => current_time('mysql'),
'message' => $message
],
['%s', '%s']
);
}Этот код фиксирует создание, обновление и удаление записей, сохраняя информацию в таблице базы данных.
Создание таблицы для хранения логов
Для хранения лога создадим отдельную таблицу при активации плагина. Добавьте в основной файл плагина следующий код:
register_activation_hook(__FILE__, 'wpappct_create_table');
function wpappct_create_table() {
global $wpdb;
$table = $wpdb->prefix . 'wpapp_changes_log';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
time DATETIME NOT NULL,
message TEXT NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}Теперь плагин сможет сохранять записи о событиях в базе.
Отслеживание изменений пользовательских метаданных
Кроме записей, часто важно контролировать изменения метаданных, например, пользовательских полей. Для этого можно использовать фильтры update_post_meta и update_user_meta. Добавим в wpapp-change-tracker-functions.php:
function wpappct_log_post_meta_update($meta_id, $post_id, $meta_key, $_meta_value) {
$user = wp_get_current_user();
$message = sprintf('Обновление мета-поля "%s" записи ID %d пользователем %s', $meta_key, $post_id, $user->user_login);
wpappct_write_log($message);
}
add_action('updated_postmeta', 'wpappct_log_post_meta_update', 10, 4);
function wpappct_log_user_meta_update($meta_id, $user_id, $meta_key, $_meta_value) {
$user = wp_get_current_user();
$message = sprintf('Обновление мета-поля "%s" пользователя ID %d администратором %s', $meta_key, $user_id, $user->user_login);
wpappct_write_log($message);
}
add_action('updated_usermeta', 'wpappct_log_user_meta_update', 10, 4);Так мы расширяем зону контроля и фиксируем важные изменения.
Создание страницы с журналом изменений в админке WordPress
Чтобы просматривать лог прямо в панели администратора, добавим меню и страницу с таблицей последних событий. В основном файле плагина добавьте:
add_action('admin_menu', 'wpappct_add_admin_page');
function wpappct_add_admin_page() {
add_menu_page(
'Журнал изменений WPApp',
'Журнал изменений',
'manage_options',
'wpapp-change-tracker',
'wpappct_render_admin_page',
'dashicons-list-view',
100
);
}
function wpappct_render_admin_page() {
global $wpdb;
$table = $wpdb->prefix . 'wpapp_changes_log';
$results = $wpdb->get_results("SELECT * FROM $table ORDER BY time DESC LIMIT 50");
echo '<div class="wrap">';
echo '<h1>Журнал изменений WPApp</h1>';
echo '<table class="wp-list-table widefat fixed striped">';
echo '<thead><tr><th>Время</th><th>Сообщение</th></tr></thead>';
echo '<tbody>';
foreach ($results as $row) {
echo '<tr><td>' . esc_html($row->time) . '</td><td>' . esc_html($row->message) . '</td></tr>';
}
echo '</tbody></table>';
echo '</div>';
}Теперь в меню появится пункт «Журнал изменений», где можно увидеть последние изменения на сайте.
Советы по расширению и безопасности
Для продвинутого использования можно добавить:
- Фильтрацию и поиск по журналу изменений.
- Отправку уведомлений на email при критических изменениях.
- Логирование изменений настроек плагинов и темы.
- Реализацию архивирования и очистки старых записей лога.
Обязательно убедитесь, что доступ к журналу имеют только администраторы и доверенные пользователи, чтобы избежать утечки информации.
Примеры готовых решений и плагинов
Если не хотите писать собственный код, можно обратить внимание на популярные плагины для аудита и логирования:
- Clearfy Pro — многофункциональный плагин с возможностями оптимизации и контроля.
- Expert Review — для организации отзывов и контроля изменений пользовательских данных.
Однако собственный плагин даёт гибкость и понимание, что происходит в системе.