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

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

Почему может понадобиться отключать плагины по расписанию

Чаще всего такая задача возникает в следующих случаях:

  • Проведение технических работ на сайте, когда нужно отключить ресурсоёмкие плагины.
  • Временное ограничение доступа к функциям (например, магазина или формы бронирования) в нерабочее время.
  • Тестирование производительности сайта без определённых плагинов.
  • Автоматическое включение/отключение плагинов для разных сценариев использования.

Ручное отключение и включение неудобно и чревато ошибками, поэтому автоматизация — оптимальный вариант.

Как работает управление плагинами в WordPress

В WordPress список активных плагинов хранится в опции active_plugins. Это массив путей до плагинов относительно папки wp-content/plugins. Чтобы отключить плагин, нужно убрать его из этого массива, а чтобы включить — добавить обратно.

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

Реализация через крон-задачи WordPress

Добавление задачи в расписание

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

function wpshab_schedule_plugin_toggle() {
    if ( ! wp_next_scheduled( 'wpshab_toggle_plugins_event' ) ) {
        wp_schedule_event( strtotime('02:00:00'), 'daily', 'wpshab_toggle_plugins_event' );
    }
}
add_action( 'wp', 'wpshab_schedule_plugin_toggle' );

В этом примере задача запускается ежедневно в 2 часа ночи.

Обработчик события

Теперь создадим функцию, которая будет отключать или включать плагин по расписанию. Для примера возьмём плагин akismet/akismet.php.

function wpshab_toggle_plugins_function() {
    $plugin = 'akismet/akismet.php';
    $active_plugins = get_option( 'active_plugins', array() );

    $current_hour = (int) current_time( 'H' );

    // Отключаем плагин с 2 до 5 часов
    if ( $current_hour >= 2 && $current_hour < 5 ) {
        if ( in_array( $plugin, $active_plugins ) ) {
            $active_plugins = array_diff( $active_plugins, array( $plugin ) );
            update_option( 'active_plugins', $active_plugins );
        }
    } else {
        // Включаем плагин в другое время
        if ( ! in_array( $plugin, $active_plugins ) ) {
            $active_plugins[] = $plugin;
            update_option( 'active_plugins', $active_plugins );
        }
    }
}
add_action( 'wpshab_toggle_plugins_event', 'wpshab_toggle_plugins_function' );

Такой подход позволяет гибко управлять активацией плагинов по времени.

Использование готовых плагинов для управления активацией плагинов

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

  • Plugin Organizer — позволяет создавать правила для включения и отключения плагинов на разных страницах и в разное время.
  • WP Crontrol — даёт удобный интерфейс для запуска и управления WP-Cron задачами.
  • Advanced Cron Manager — помогает создавать задачи для автоматизации, включая управление плагинами.

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

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

Тестирование на локальной копии

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

Логирование изменений

Добавьте в код логирование действий — это поможет быстро выявить проблемы и понять, когда и какой плагин был включён или отключён.

function wpshab_log_plugin_toggle( $message ) {
    if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
        error_log( '[wpshab] ' . $message );
    }
}

Вызывайте wpshab_log_plugin_toggle('Akismet отключён'); после изменения статуса плагина.

Ограничение по времени выполнения

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

Пример расширения: управление несколькими плагинами

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

function wpshab_toggle_multiple_plugins() {
    $plugins_to_manage = array(
        'akismet/akismet.php',
        'hello-dolly/hello.php'
    );

    $active_plugins = get_option( 'active_plugins', array() );
    $current_hour = (int) current_time( 'H' );

    foreach ( $plugins_to_manage as $plugin ) {
        if ( $current_hour >= 2 && $current_hour < 5 ) {
            if ( in_array( $plugin, $active_plugins ) ) {
                $active_plugins = array_diff( $active_plugins, array( $plugin ) );
                wpshab_log_plugin_toggle( "Отключён плагин: {$plugin}" );
            }
        } else {
            if ( ! in_array( $plugin, $active_plugins ) ) {
                $active_plugins[] = $plugin;
                wpshab_log_plugin_toggle( "Включён плагин: {$plugin}" );
            }
        }
    }

    update_option( 'active_plugins', $active_plugins );
}
add_action( 'wpshab_toggle_plugins_event', 'wpshab_toggle_multiple_plugins' );

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

Заключение

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

Для удобства можно комбинировать собственные скрипты с плагинами из репозитория, например, WP Crontrol. Это позволит визуально контролировать расписание и быстро вносить изменения.

Не забывайте тестировать изменения и логировать действия для надёжной работы сайта.

Автоматическая оптимизация базы данных WordPress: как улучшить производительность сайта
30.03.2026
Как создать автоматические этикетки для постов в WordPress
14.04.2026
Автоматическое создание заказов и уведомлений в WooCommerce по заданным событиям
10.05.2026
Автоматическое обновление складских остатков WooCommerce через API
30.04.2026
Как изменить автозаполнение форм в WordPress
30.03.2026