Как создать автоматический плагин для проверки состояния сайта WordPress

В этой статье разберём, как разработать собственный плагин для 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. Такой инструмент позволяет быстро получать данные о состоянии сайта, выявлять и устранять проблемы до того, как они повлияют на пользователей.

В статье мы реализовали базовый функционал с возможностью дальнейшего расширения под конкретные задачи и интеграции с другими сервисами.

Как избежать проблем с перенаправлениями в WordPress: практические советы и примеры
09.04.2026
WooCommerce: как автоматически отключать возможность оформления заказа при отсутствии товара на складе
17.06.2026
Как автоматизировать работу с мета-данными в WordPress
20.11.2025
WooCommerce: как автоматически удалять неактивные заказы через код
04.06.2026
Как использовать хуки для отложенного выполнения кода в WordPress
07.12.2025