Как автоматически отключать плагины в WordPress по расписанию

В процессе эксплуатации WordPress-сайта иногда возникает необходимость временно отключать плагины — например, для проведения технических работ, тестирования или снижения нагрузки в определённые часы. Вместо ручного отключения и включения можно автоматизировать этот процесс и настроить отключение плагинов по расписанию. В этой статье подробно рассмотрим, как это реализовать с помощью WP-Cron и собственного кода.

Почему важно автоматизировать отключение плагинов

Часто плагины могут вызывать конфликты или нагружать сайт в определённые периоды. Например, плагин для бэкапа или аналитики не должен работать круглосуточно, или рекламные блоки нужно отключать в ночное время, чтобы не мешать серверу. Автоматизация отключения позволяет:

  • Экономить ресурсы сервера в часы пик и ночью.
  • Обеспечивать стабильность сайта при технических работах.
  • Быстро и безопасно управлять функционалом без участия администратора.

Рассмотрим, как реализовать такую автоматизацию на практике.

Использование WP-Cron для планирования задач

WordPress имеет встроенный планировщик задач WP-Cron, который позволяет запускать определённые функции по расписанию. Мы можем использовать его, чтобы в нужное время отключать и включать плагины.

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

Регистрация новых событий в WP-Cron

Для начала зарегистрируем собственные события:

function wpboot_register_cron_events() {
    if ( ! wp_next_scheduled( 'wpboot_deactivate_plugins_event' ) ) {
        wp_schedule_event( strtotime('23:00:00'), 'daily', 'wpboot_deactivate_plugins_event' );
    }
    if ( ! wp_next_scheduled( 'wpboot_activate_plugins_event' ) ) {
        wp_schedule_event( strtotime('06:00:00'), 'daily', 'wpboot_activate_plugins_event' );
    }
}
add_action( 'wp', 'wpboot_register_cron_events' );

Этот код планирует два события: wpboot_deactivate_plugins_event на 23:00 и wpboot_activate_plugins_event на 06:00 следующего дня. Важно, что время указывается в формате timestamp, и WP-Cron запускается при посещении сайта, поэтому событие может немного сдвигаться.

Обработка событий — отключение и включение плагинов

Теперь нужно написать функции, которые будут отключать и включать плагины. Для примера отключим плагин akismet/akismet.php и contact-form-7/wp-contact-form-7.php.

function wpboot_deactivate_plugins() {
    $plugins_to_deactivate = [
        'akismet/akismet.php',
        'contact-form-7/wp-contact-form-7.php'
    ];
    foreach ( $plugins_to_deactivate as $plugin ) {
        if ( is_plugin_active( $plugin ) ) {
            deactivate_plugins( $plugin );
        }
    }
}
add_action( 'wpboot_deactivate_plugins_event', 'wpboot_deactivate_plugins' );

function wpboot_activate_plugins() {
    $plugins_to_activate = [
        'akismet/akismet.php',
        'contact-form-7/wp-contact-form-7.php'
    ];
    foreach ( $plugins_to_activate as $plugin ) {
        if ( ! is_plugin_active( $plugin ) ) {
            activate_plugin( $plugin );
        }
    }
}
add_action( 'wpboot_activate_plugins_event', 'wpboot_activate_plugins' );

Функции проверяют, активен ли плагин, и включают или отключают его соответственно. Для работы функций is_plugin_active, activate_plugin и deactivate_plugins нужно подключить файл с их определениями, если код выполняется вне админки.

Обработка времени и зоны — важные нюансы

WP-Cron использует время сервера, а не часовой пояс сайта, что может привести к рассинхронизации. Чтобы избежать этого, рекомендуем приводить время к timestamp с учётом текущего часового пояса WordPress:

function wpboot_get_timestamp_for_time( $time_str ) {
    $timezone = new DateTimeZone( wp_timezone_string() );
    $date = new DateTime( 'today ' . $time_str, $timezone );
    return $date->getTimestamp();
}

Используйте эту функцию при планировании:

wp_schedule_event( wpboot_get_timestamp_for_time('23:00:00'), 'daily', 'wpboot_deactivate_plugins_event' );

Таким образом расписание будет корректным для вашего сайта.

Практические рекомендации и улучшения

1. Учитывайте кеширование: WP-Cron запускается при посещении сайта, поэтому на сайтах с малым трафиком может срабатывать с задержкой. Для точного срабатывания используйте системный cron и wp-cron.php.

2. Логируйте изменения: Добавьте запись в лог при отключении и включении плагинов — это поможет отследить работу скрипта.

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

Пример расширения: создание настроек в админке для управления

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

Примерный код для добавления опции и использования её в функции отключения:

function wpboot_get_plugins_to_manage() {
    $plugins = get_option( 'wpboot_plugins_to_schedule', [] );
    return is_array( $plugins ) ? $plugins : [];
}

function wpboot_deactivate_plugins() {
    $plugins_to_deactivate = wpboot_get_plugins_to_manage();
    foreach ( $plugins_to_deactivate as $plugin ) {
        if ( is_plugin_active( $plugin ) ) {
            deactivate_plugins( $plugin );
        }
    }
}

Добавление админ-страницы выходит за рамки этой статьи, но для примера можете использовать стандартные функции WordPress: add_options_page и register_setting.

Совместимость с плагинами WPShop

Если вы используете плагины с https://wpshop.ru/, например, Clearfy Pro, они могут иметь собственные инструменты оптимизации работы плагинов и расписание задач. Рекомендуем изучить их документацию для интеграции с автоматическим отключением.

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

Как увеличить качество изображений в WordPress для быстрой загрузки и высокого качества
20.05.2025
Как отключить AJAX-загрузку в Gutenberg блоках WordPress
02.04.2026
Почему не работают купоны в WooCommerce и как это исправить
25.04.2026
Как удалить все медиафайлы из медиатеки WordPress программно
22.02.2026
Как автоматизировать управление виджетами WordPress с помощью кода
03.01.2026