В этой статье разберём, как разработать собственный плагин для WordPress, который автоматически проверяет состояние сайта, выявляет возможные проблемы и уведомляет администратора. Такой инструмент полезен для постоянного мониторинга производительности, безопасности и корректной работы сайта без привлечения сторонних сервисов.
Что такое плагин для проверки состояния сайта и зачем он нужен
Плагин для проверки состояния сайта — это набор функций, который регулярно анализирует ключевые параметры сайта: загрузку страниц, доступность базы данных, наличие обновлений, состояние файлов и многое другое. Результаты проверок можно выводить в админ-панели или отправлять на email.
Автоматизация таких проверок помогает своевременно выявлять сбои и предотвращать критические ошибки, что особенно важно для бизнес-сайтов и проектов с большой посещаемостью.
Основные направления проверки состояния сайта WordPress
Обычно в плагинах мониторинга проверяют следующие аспекты:
- Доступность сайта и время отклика сервера;
- Обновления WordPress, тем и плагинов;
- Состояние базы данных (наличие ошибок, размер таблиц);
- Целостность важных файлов и прав доступа;
- Использование актуальных версий PHP и MySQL;
- Наличие активных спам-комментариев или подозрительной активности;
- Резервное копирование и его регулярность;
- Проверка безопасности — попытки взлома, известные уязвимости.
В нашей реализации мы рассмотрим базовый набор проверок с возможностью расширения.
Создание структуры плагина
Начнём с базового файла плагина wpdigest-health-checker.php:
<?php
/**
* Plugin Name: WPDigest Health Checker
* Description: Автоматический плагин для проверки состояния сайта WordPress
* Version: 1.0
* Author: WPDigest
*/
// Защита от прямого запуска
if (!defined('ABSPATH')) {
exit;
}
// Основной класс плагина
class WPDigest_Health_Checker {
public function __construct() {
add_action('admin_menu', array($this, 'wpdigest_add_admin_page'));
add_action('wp_ajax_wpdigest_run_checks', array($this, 'wpdigest_run_checks'));
}
// Добавляем страницу настроек в админке
public function wpdigest_add_admin_page() {
add_menu_page(
'Проверка состояния',
'Health Checker',
'manage_options',
'wpdigest-health-checker',
array($this, 'wpdigest_render_admin_page'),
'dashicons-yes',
100
);
}
// Выводим HTML страницы с кнопкой запуска проверок
public function wpdigest_render_admin_page() {
?>
<div class="wrap">
<h1>Проверка состояния сайта</h1>
<button id="wpdigest-check-btn" class="button button-primary">Запустить проверку</button>
<div id="wpdigest-check-result" style="margin-top:20px;"></div>
</div>
<script>
jQuery(document).ready(function($) {
$('#wpdigest-check-btn').on('click', function() {
$('#wpdigest-check-result').html('Проверка...');
$.post(ajaxurl, {action: 'wpdigest_run_checks'}, function(response) {
$('#wpdigest-check-result').html(response.data);
});
});
});
</script>
<?php
}
// Функция запуска проверок и формирования отчёта
public function wpdigest_run_checks() {
if (!current_user_can('manage_options')) {
wp_send_json_error('Доступ запрещён');
}
$report = '';
// Проверка времени отклика
$start = microtime(true);
$response = wp_remote_get(home_url());
$end = microtime(true);
$time = round(($end - $start) * 1000, 2);
if (is_wp_error($response)) {
$report .= '<p style="color:red;">Сайт недоступен: ' . esc_html($response->get_error_message()) . '</p>';
} else {
$report .= '<p>Время отклика сайта: ' . $time . ' мс</p>';
}
// Проверка обновлений
include_once(ABSPATH . 'wp-admin/includes/update.php');
$updates = get_core_updates();
if (!empty($updates)) {
$report .= '<p style="color:orange;">Доступно обновление WordPress.</p>';
} else {
$report .= '<p>WordPress обновлён до последней версии.</p>';
}
// Проверка базы данных
global $wpdb;
$check = $wpdb->get_results('CHECK TABLE ' . $wpdb->prefix . 'posts');
if ($check[0]->Msg_text !== 'OK') {
$report .= '<p style="color:red;">Проблемы с таблицей posts: ' . esc_html($check[0]->Msg_text) . '</p>';
} else {
$report .= '<p>Таблица posts в порядке.</p>';
}
// Проверка PHP версии
$php_version = phpversion();
if (version_compare($php_version, '7.4', '<')) {
$report .= '<p style="color:red;">Рекомендуется обновить PHP до версии 7.4 или выше. Текущая: ' . esc_html($php_version) . '</p>';
} else {
$report .= '<p>Версия PHP: ' . esc_html($php_version) . '</p>';
}
// Проверка прав доступа к wp-config.php
$config_file = ABSPATH . 'wp-config.php';
$perms = substr(sprintf('%o', fileperms($config_file)), -4);
if ($perms > '0644') {
$report .= '<p style="color:red;">Права на wp-config.php слишком открыты: ' . esc_html($perms) . '. Рекомендуется 0644 или меньше.</p>';
} else {
$report .= '<p>Права на wp-config.php: ' . esc_html($perms) . '</p>';
}
wp_send_json_success($report);
}
}
new WPDigest_Health_Checker();
Расширение функционала плагина: уведомления и регулярные проверки
Чтобы плагин присылал уведомления, можно добавить проверку в cron-задачу WordPress. Пример регистрации задачи:
add_action('wpdigest_daily_check', 'wpdigest_run_daily_check');
function wpdigest_schedule_cron() {
if (!wp_next_scheduled('wpdigest_daily_check')) {
wp_schedule_event(time(), 'daily', 'wpdigest_daily_check');
}
}
add_action('wp', 'wpdigest_schedule_cron');
function wpdigest_run_daily_check() {
// Запускаем проверки как в ajax обработчике
// Сохраняем отчёт в опции или отправляем email
}
Используйте функцию wp_mail() для отправки отчётов на почту администратора, если обнаружены критичные ошибки.
Аналоги и полезные плагины для мониторинга
Если хотите готовое решение с расширенным функционалом, обратите внимание на плагины:
- Clearfy Pro — оптимизация и безопасность;
- WPRemark — мониторинг комментариев и активности;
Но создание собственного плагина даёт максимальную гибкость и понимание процессов.
Выводы и рекомендации
Создание собственного плагина для проверки состояния сайта — полезный навык для разработчиков и администраторов WordPress. Такой инструмент позволяет быстро получать данные о состоянии сайта, выявлять и устранять проблемы до того, как они повлияют на пользователей.
В статье мы реализовали базовый функционал с возможностью дальнейшего расширения под конкретные задачи и интеграции с другими сервисами.