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

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

Почему стоит создавать собственный плагин мониторинга WordPress

Готовые плагины для мониторинга часто предоставляют много функций, но не всегда позволяют гибко настраивать логику проверки под конкретные задачи. Создавая собственный плагин, вы:

  • Получаете полный контроль над тем, что и как проверяется;
  • Можете интегрировать проверку с внутренними процессами сайта или внешними сервисами;
  • Оптимизируете производительность, исключая ненужные проверки;
  • Обеспечиваете безопасность данных, поскольку код полностью ваш.

Давайте рассмотрим, как на практике организовать такой плагин.

Структура плагина и базовая настройка

Начнем с создания базового каркаса плагина. Для этого в папке wp-content/plugins создайте папку wpmonitor-health-check и внутри создайте файл wpmonitor-health-check.php:

<?php
/**
 * Plugin Name: WPMonitor Health Check
 * Description: Плагин для мониторинга состояния сайта WordPress
 * Version: 1.0
 * Author: WPMonitor
 */

// Защита от прямого запуска
if (!defined('ABSPATH')) {
    exit;
}

// Инициализация плагина
add_action('admin_menu', 'wpmonitor_add_admin_menu');
add_action('admin_init', 'wpmonitor_settings_init');

function wpmonitor_add_admin_menu() {
    add_menu_page('WPMonitor Health Check', 'WPMonitor', 'manage_options', 'wpmonitor_health_check', 'wpmonitor_options_page');
}

function wpmonitor_settings_init() {
    register_setting('wpmonitor_settings', 'wpmonitor_settings_options');

    add_settings_section(
        'wpmonitor_section',
        __('Основные настройки мониторинга', 'wpmonitor'),
        'wpmonitor_settings_section_callback',
        'wpmonitor_settings'
    );

    add_settings_field(
        'wpmonitor_check_interval',
        __('Интервал проверки, минут', 'wpmonitor'),
        'wpmonitor_check_interval_render',
        'wpmonitor_settings',
        'wpmonitor_section'
    );
}

function wpmonitor_check_interval_render() {
    $options = get_option('wpmonitor_settings_options');
    ?>
    <input type='number' name='wpmonitor_settings_options[wpmonitor_check_interval]' value='<?php echo $options['wpmonitor_check_interval'] ?? 5; ?>' min='1' max='60'>
    <?php
}

function wpmonitor_settings_section_callback() {
    echo __('Настройте параметры мониторинга сайта.', 'wpmonitor');
}

function wpmonitor_options_page() {
    ?>
    <form action='options.php' method='post'>
        <h1>WPMonitor Health Check</h1>
        <?php
        settings_fields('wpmonitor_settings');
        do_settings_sections('wpmonitor_settings');
        submit_button();
        ?>
    </form>
    <?php
}

Этот код создаст административную страницу с настройкой интервала проверки. Далее добавим саму логику мониторинга.

Реализация функций мониторинга

Основные параметры, которые имеют смысл проверять:

  • Доступность сайта;
  • Использование памяти и нагрузки;
  • Ошибки PHP и логов;
  • Состояние базы данных;
  • Статус важных плагинов.

Проверка доступности сайта

Для проверки доступности можно использовать функцию wp_remote_get для обращения к главной странице сайта. Например:

function wpmonitor_check_site_availability() {
    $response = wp_remote_get(home_url());
    if (is_wp_error($response)) {
        return 'Сайт недоступен: ' . $response->get_error_message();
    }
    $code = wp_remote_retrieve_response_code($response);
    if ($code !== 200) {
        return 'Ошибка ответа сервера: ' . $code;
    }
    return 'Сайт доступен';
}

Эту функцию можно вызвать по расписанию или при заходе в админку.

Проверка использования ресурсов

WordPress не предоставляет встроенных функций для детального мониторинга памяти и процессора, но можно получить базовую информацию:

function wpmonitor_check_memory_usage() {
    $memory = memory_get_usage(true);
    $memory_mb = round($memory / 1024 / 1024, 2);
    return 'Использование памяти: ' . $memory_mb . ' МБ';
}

Для более продвинутого мониторинга можно подключать сторонние PHP-библиотеки или использовать серверные инструменты.

Анализ логов ошибок PHP

Чтение логов ошибок напрямую из PHP скрипта — задача с ограничениями из-за прав доступа. Но если логи доступны, можно реализовать чтение последних строк файла логов для быстрого просмотра ошибок.

function wpmonitor_get_php_error_log($lines = 20) {
    $log_file = ini_get('error_log');
    if (!$log_file || !file_exists($log_file)) {
        return 'Файл лога ошибок PHP не найден';
    }

    $fp = fopen($log_file, 'r');
    if (!$fp) {
        return 'Не удалось открыть файл лога ошибок';
    }

    $pos = -2;
    $beginning = false;
    $text = '';
    $count = 0;

    fseek($fp, $pos, SEEK_END);

    while ($count < $lines) {
        $char = fgetc($fp);
        if ($char === false) {
            $beginning = true;
            break;
        }
        if ($char === "\n") {
            $count++;
            if ($count == $lines) {
                break;
            }
        }
        $pos--;
        fseek($fp, $pos, SEEK_END);
    }

    if ($beginning) {
        fseek($fp, 0, SEEK_SET);
    }

    $text = fread($fp, abs($pos));
    fclose($fp);

    return nl2br($text);
}

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

Проверка состояния базы данных

Для проверки базы данных можно проверить основные таблицы на наличие ошибок и оптимизировать их:

function wpmonitor_check_database() {
    global $wpdb;
    $tables = $wpdb->get_results('SHOW TABLE STATUS', ARRAY_A);
    $issues = [];
    foreach ($tables as $table) {
        if ($table['Comment'] !== 'OK') {
            $issues[] = 'Проблема с таблицей ' . $table['Name'] . ': ' . $table['Comment'];
        }
    }
    if (empty($issues)) {
        return 'База данных в порядке';
    }
    return implode('<br>', $issues);
}

Так вы получите быстрый отчет о состоянии таблиц.

Автоматизация мониторинга с помощью WP-Cron

Для регулярного мониторинга создадим собственное событие с интервалом, который задается в настройках.

add_filter('cron_schedules', function($schedules) {
    $options = get_option('wpmonitor_settings_options');
    $interval = isset($options['wpmonitor_check_interval']) ? intval($options['wpmonitor_check_interval']) * 60 : 300;
    $schedules['wpmonitor_interval'] = [
        'interval' => $interval,
        'display' => 'Интервал WPMonitor'
    ];
    return $schedules;
});

if (!wp_next_scheduled('wpmonitor_cron_hook')) {
    wp_schedule_event(time(), 'wpmonitor_interval', 'wpmonitor_cron_hook');
}

add_action('wpmonitor_cron_hook', 'wpmonitor_perform_health_check');

function wpmonitor_perform_health_check() {
    $availability = wpmonitor_check_site_availability();
    $memory = wpmonitor_check_memory_usage();
    $db_status = wpmonitor_check_database();

    // Здесь можно сохранять результаты в опции или отправлять на email
    update_option('wpmonitor_last_check', [
        'time' => current_time('mysql'),
        'availability' => $availability,
        'memory' => $memory,
        'database' => $db_status
    ]);
}

Этот код создаст периодическую задачу, которая будет запускать проверки и сохранять результаты.

Отображение результатов мониторинга в админке

Чтобы видеть результаты, добавим вывод последних данных на страницу настроек плагина:

function wpmonitor_options_page() {
    $last_check = get_option('wpmonitor_last_check');
    ?>
    <div class="wrap">
        <h1>WPMonitor Health Check</h1>
        <form action='options.php' method='post'>
            <?php
            settings_fields('wpmonitor_settings');
            do_settings_sections('wpmonitor_settings');
            submit_button();
            ?>
        </form>
        <h2>Последняя проверка</h2>
        <?php if ($last_check): ?>
            <p><strong>Время:</strong> <?php echo esc_html($last_check['time']); ?></p>
            <p><strong>Доступность:</strong> <?php echo esc_html($last_check['availability']); ?></p>
            <p><strong>Память:</strong> <?php echo esc_html($last_check['memory']); ?></p>
            <p><strong>База данных:</strong> <?php echo wp_kses_post($last_check['database']); ?></p>
        <?php else: ?>
            <p>Проверки еще не выполнялись.</p>
        <?php endif; ?>
    </div>
    <?php
}

Интеграция с WPShop.ru: плагин Clearfy Pro для расширенной оптимизации

Для расширения возможностей мониторинга и оптимизации можно использовать Clearfy Pro — плагин, который позволяет отключать ненужные функции WordPress, оптимизировать базу данных и улучшать безопасность. Он отлично дополнит ваш собственный плагин, автоматизируя многие задачи.

Выводы и рекомендации

Создание собственного плагина мониторинга здоровья WordPress — отличный способ получить гибкое и точное решение под свои задачи. В статье мы рассмотрели базовые проверки: доступность сайта, использование памяти, анализ логов и состояние базы данных. Используя WP-Cron, можно автоматизировать эти проверки и получать актуальную информацию. Для расширения функционала советуем интегрировать готовые решения, например, Clearfy Pro от WPSHOP.ru.

Как отладить проблемы с AJAX в WordPress: практическое руководство
08.03.2026
Как использовать WP-Cron для решения проблем с задержкой задач в WordPress
18.01.2026
Как отладивать проблемы с производительностью WordPress: практические советы
11.11.2025
WooCommerce: как автоматически очищать корзину после успешной оплаты
07.06.2026
WooCommerce: не отображается изображение товара после обновления — как исправить
09.05.2026