Иногда возникает необходимость временно отключить определённые плагины WordPress в заданное время. Например, для проведения технических работ, снижения нагрузки на сервер или решения конфликтов. В этой статье мы подробно разберём, как реализовать автоматическое отключение и включение плагинов по расписанию с помощью встроенных возможностей WordPress и дополнительного кода.
Почему важно управлять плагинами по расписанию
Плагины — важная часть функционала сайта, но некоторые из них могут сильно нагружать сервер или конфликтовать с другими расширениями. Автоматическое отключение позволяет:
- Повышать производительность в часы пик, отключая ресурсоёмкие плагины.
- Автоматически выключать плагины для технических работ без ручного вмешательства.
- Управлять функциональностью сайта в зависимости от времени суток или дня недели.
Такой подход особенно полезен для крупных проектов с разными режимами работы и большой нагрузкой.
Как WordPress хранит и активирует плагины
Статус активных плагинов хранится в опции active_plugins базы данных WordPress. Это массив с путями к плагинам относительно папки wp-content/plugins. Чтобы отключить плагин, нужно удалить его из этого массива, чтобы включить — добавить обратно.
Зная это, мы можем программно менять список активных плагинов, реализуя расписание.
Реализация автоматического отключения и включения плагинов с помощью WP-Cron
Настройка задач WP-Cron
WordPress имеет встроенный планировщик задач — WP-Cron. Он позволяет запускать функции в определённое время. Для нашего сценария создадим две задачи: одна отключает плагин, другая — включает.
Пример кода для файла плагина или functions.php темы
<?php
// Функция для отключения плагина
function wpcodex_deactivate_plugin_scheduled($plugin) {
$active_plugins = get_option('active_plugins');
if (($key = array_search($plugin, $active_plugins)) !== false) {
unset($active_plugins[$key]);
update_option('active_plugins', $active_plugins);
}
}
// Функция для включения плагина
function wpcodex_activate_plugin_scheduled($plugin) {
$active_plugins = get_option('active_plugins');
if (!in_array($plugin, $active_plugins)) {
$active_plugins[] = $plugin;
update_option('active_plugins', $active_plugins);
}
}
// Добавление задач в WP-Cron
function wpcodex_schedule_plugin_toggle() {
if (!wp_next_scheduled('wpcodex_deactivate_plugin_event')) {
// Отключить плагин в 2 часа ночи
wp_schedule_event(strtotime('02:00:00'), 'daily', 'wpcodex_deactivate_plugin_event');
}
if (!wp_next_scheduled('wpcodex_activate_plugin_event')) {
// Включить плагин в 6 утра
wp_schedule_event(strtotime('06:00:00'), 'daily', 'wpcodex_activate_plugin_event');
}
}
add_action('wp', 'wpcodex_schedule_plugin_toggle');
// Обработчики событий
add_action('wpcodex_deactivate_plugin_event', function() {
wpcodex_deactivate_plugin_scheduled('example-plugin/example-plugin.php'); // Замените на путь вашего плагина
});
add_action('wpcodex_activate_plugin_event', function() {
wpcodex_activate_plugin_scheduled('example-plugin/example-plugin.php'); // Замените на путь вашего плагина
});
// Очистка при деактивации плагина (если код в плагине)
function wpcodex_clear_schedules() {
wp_clear_scheduled_hook('wpcodex_deactivate_plugin_event');
wp_clear_scheduled_hook('wpcodex_activate_plugin_event');
}
register_deactivation_hook(__FILE__, 'wpcodex_clear_schedules');
?>
В этом примере плагин с файлом example-plugin/example-plugin.php будет отключаться каждую ночь в 2:00 и включаться в 6:00 утра.
Настройка расписания и отладка
WP-Cron зависит от посещений сайта, поэтому для точности запуска лучше настроить системный cron на сервере, вызывающий wp-cron.php регулярно. Это повысит надёжность.
Для изменения времени запуска достаточно подкорректировать strtotime() в коде. Можно расширить функционал, добавив опции в админку для управления расписанием.
Альтернативы: плагины для планирования включения и отключения
Если вы не хотите писать код, можно использовать готовые решения, например:
- Plugin Toggle — простой плагин для ручного включения/отключения.
- Clearfy Pro — предлагает расширенные инструменты оптимизации, включая управление плагинами.
Однако, большинство таких плагинов не поддерживают именно автоматическое отключение по расписанию, что делает написанный вручную код более гибким.
Расширение функционала: отключение нескольких плагинов и условия
Если нужно управлять несколькими плагинами, можно передавать массив с путями и обрабатывать их циклом:
function wpcodex_deactivate_plugins_scheduled($plugins) {
$active_plugins = get_option('active_plugins');
foreach ($plugins as $plugin) {
if (($key = array_search($plugin, $active_plugins)) !== false) {
unset($active_plugins[$key]);
}
}
update_option('active_plugins', $active_plugins);
}
Также можно добавить проверку условий, например, дату, IP пользователя, или нагрузку сервера, чтобы принимать решение об отключении.
Заключение
Автоматическое отключение и включение плагинов по расписанию — мощный инструмент для оптимизации и управления WordPress-сайтом. Используя WP-Cron и прямую работу с опцией active_plugins, можно гибко настроить работу плагинов без лишних ручных действий.
Если вы ищете готовые решения для оптимизации сайта, рекомендуем обратить внимание на Clearfy Pro — это плагин с большим набором функций для управления и ускорения WordPress.