В процессе работы с WordPress иногда возникает задача временно отключать определённые плагины на время пиковой нагрузки, технических работ или для тестирования. Вручную делать это неудобно и рискованно. В этой статье мы подробно разберём, как организовать автоматическое отключение и включение плагинов в WordPress по расписанию с помощью встроенных возможностей WP и небольших фрагментов кода.
Почему важно уметь отключать плагины по расписанию
Отключение плагинов может помочь:
- Снизить нагрузку на сервер в пиковые часы;
- Избежать конфликтов во время обновлений и тестирования;
- Автоматизировать технические работы без участия администратора;
- Улучшить безопасность, временно деактивируя плагины с уязвимостями.
Вместо того, чтобы делать это вручную через админку, можно настроить автоматическое управление плагинами с помощью WP Cron — встроенного планировщика заданий.
Как работает отключение плагинов в WordPress
Вордпресс хранит список активных плагинов в опции active_plugins в базе данных. Чтобы деактивировать плагин, нужно удалить его из этого списка. Чтобы активировать — добавить обратно.
Для примера возьмём плагин с путём example-plugin/example-plugin.php. Его отключение — это удаление из массива активных плагинов, а включение — добавление обратно.
Пример функции для отключения плагина
function cyrtolat_deactivate_plugin_scheduled($plugin_path) {
$active_plugins = get_option('active_plugins', []);
if (in_array($plugin_path, $active_plugins)) {
$active_plugins = array_diff($active_plugins, [$plugin_path]);
update_option('active_plugins', $active_plugins);
}
}Пример функции для активации плагина
function cyrtolat_activate_plugin_scheduled($plugin_path) {
$active_plugins = get_option('active_plugins', []);
if (!in_array($plugin_path, $active_plugins)) {
$active_plugins[] = $plugin_path;
update_option('active_plugins', $active_plugins);
}
}Эти функции можно вызывать в нужное время через WP Cron.
Настройка WP Cron для автоматического управления плагинами
WP Cron позволяет регистрировать свои задачи и запускать их по расписанию. Для нашей задачи создадим две задачи: одна — отключение плагина, другая — включение.
Регистрация событий и расписаний
add_action('cyrtolat_deactivate_plugin_event', function() {
cyrtolat_deactivate_plugin_scheduled('example-plugin/example-plugin.php');
});
add_action('cyrtolat_activate_plugin_event', function() {
cyrtolat_activate_plugin_scheduled('example-plugin/example-plugin.php');
});Чтобы запланировать событие, используем функцию wp_schedule_event(). Например, отключать плагин каждый день в 23:00, а включать в 06:00.
function cyrtolat_schedule_plugin_management() {
if (!wp_next_scheduled('cyrtolat_deactivate_plugin_event')) {
$timestamp = strtotime('23:00:00');
if ($timestamp <= time()) {
$timestamp += DAY_IN_SECONDS;
}
wp_schedule_event($timestamp, 'daily', 'cyrtolat_deactivate_plugin_event');
}
if (!wp_next_scheduled('cyrtolat_activate_plugin_event')) {
$timestamp = strtotime('06:00:00');
if ($timestamp <= time()) {
$timestamp += DAY_IN_SECONDS;
}
wp_schedule_event($timestamp, 'daily', 'cyrtolat_activate_plugin_event');
}
}
add_action('wp', 'cyrtolat_schedule_plugin_management');Эта функция проверит, есть ли уже запланированные события, и если нет — поставит их на расписание.
Особенности и рекомендации
WP Cron запускается только при посещении сайта, поэтому точность расписания зависит от трафика. Для более точного выполнения можно настроить системный cron на сервере, который будет инициировать WP Cron.
Также функции cyrtolat_deactivate_plugin_scheduled и cyrtolat_activate_plugin_scheduled можно расширять проверками и логированием, чтобы контролировать процесс.
Пример расширения с логированием
function cyrtolat_deactivate_plugin_scheduled($plugin_path) {
$active_plugins = get_option('active_plugins', []);
if (in_array($plugin_path, $active_plugins)) {
$active_plugins = array_diff($active_plugins, [$plugin_path]);
update_option('active_plugins', $active_plugins);
error_log("[cyrtolat] Плагин {$plugin_path} деактивирован по расписанию.");
}
}Использование плагинов для управления активацией
Если кодирование не подходит, можно воспользоваться плагинами, которые поддерживают управление активацией:
- Plugin Activator — позволяет включать и выключать плагины по расписанию;
- Clearfy Pro — содержит расширенные настройки оптимизации, включая управление плагинами.
Однако, как правило, кастомные задачи удобнее решать через собственные функции, дающие полный контроль.
Итоговые рекомендации по внедрению
1. Тестируйте функции отключения на тестовой среде, чтобы избежать ошибок и падения сайта.
2. Убедитесь, что нужный плагин корректно реагирует на отключение и повторное включение без потери настроек.
3. Используйте системный cron для более точного срабатывания заданий WP Cron.
4. Логируйте события для мониторинга и диагностики.
5. При необходимости расширяйте функционал, добавляя уведомления по email или в админку.