В некоторых случаях требуется временно отключать плагины в WordPress по расписанию. Например, для проведения технического обслуживания, снижения нагрузки в пиковые часы или решения конфликтов с другими плагинами. В этой статье подробно разберём, как реализовать автоматическое отключение и включение плагинов с помощью WP-Cron и пользовательских функций.
Зачем нужно автоматическое отключение плагинов в WordPress
Плагины — мощный инструмент для расширения функционала сайта, однако некоторые из них могут создавать нагрузку на сервер или конфликтовать с другими решениями. Если вы знаете, что в определённое время плагин не нужен, можно настроить его отключение по расписанию. Это поможет:
- Оптимизировать производительность сайта в часы пик;
- Избежать сбоев и конфликтов между плагинами;
- Автоматизировать задачи технического обслуживания;
- Экономить ресурсы сервера.
Рассмотрим, как реализовать такую логику программно и с помощью популярных плагинов.
Использование WP-Cron для отключения плагина по расписанию
WP-Cron — встроенный планировщик событий в WordPress. С его помощью можно запускать функции по расписанию без необходимости использовать системные cron-задачи сервера.
Для автоматического отключения и включения плагина необходимо создать две функции: одна будет деактивировать плагин, другая — активировать. Далее зарегистрируем задачи в WP-Cron.
Пример кода для отключения и включения плагина
function wpbook_deactivate_plugin_scheduled() {
if ( is_plugin_active( 'akismet/akismet.php' ) ) { // замените на путь вашего плагина
deactivate_plugins( 'akismet/akismet.php' );
}
}
function wpbook_activate_plugin_scheduled() {
if ( !is_plugin_active( 'akismet/akismet.php' ) ) { // замените на путь вашего плагина
activate_plugin( 'akismet/akismet.php' );
}
}
// Регистрация событий при инициализации
define( 'WPBOOK_PLUGIN_SLUG', 'akismet/akismet.php' );
add_action( 'wp', 'wpbook_schedule_plugin_toggle' );
function wpbook_schedule_plugin_toggle() {
if ( !wp_next_scheduled( 'wpbook_deactivate_plugin_event' ) ) {
// Отключаем плагин каждый день в 2:00
wp_schedule_event( strtotime( '02:00:00' ), 'daily', 'wpbook_deactivate_plugin_event' );
}
if ( !wp_next_scheduled( 'wpbook_activate_plugin_event' ) ) {
// Включаем плагин каждый день в 5:00
wp_schedule_event( strtotime( '05:00:00' ), 'daily', 'wpbook_activate_plugin_event' );
}
}
add_action( 'wpbook_deactivate_plugin_event', 'wpbook_deactivate_plugin_scheduled' );
add_action( 'wpbook_activate_plugin_event', 'wpbook_activate_plugin_scheduled' );В этом примере плагин Akismet будет автоматически отключаться в 2:00 и включаться в 5:00. Путь к плагину указывается относительно папки wp-content/plugins, например, akismet/akismet.php. Подставьте свой плагин.
Как узнать путь плагина для функций deactivate_plugins и activate_plugin
Чтобы узнать путь плагина, зайдите в папку wp-content/plugins вашего сайта. Путь — это имя папки плагина и файл плагина через слэш. Например:
- Плагин Contact Form 7:
contact-form-7/wp-contact-form-7.php - Плагин WooCommerce:
woocommerce/woocommerce.php
Этот путь нужно использовать в функциях deactivate_plugins и activate_plugin.
Использование плагинов для управления активацией по расписанию
Если не хочется писать код, можно воспользоваться плагинами с функционалом управления активацией. Однако таких решений немного, и часто они не поддерживают расписание напрямую. Вот несколько вариантов:
- Plugin Organizer — позволяет управлять активацией плагинов на отдельных страницах, но не по времени.
- WP Crontrol — даёт полный контроль над WP-Cron задачами, можно создавать и редактировать события для активации/деактивации.
С помощью WP Crontrol можно вручную создать задачи, аналогичные тем, что описаны в коде выше.
Как проверить, что задачи WP-Cron работают корректно
WP-Cron запускается при загрузке сайта, поэтому если на сайте мало посещений, задачи могут не сработать вовремя. Для проверки и отладки советуем:
- Использовать плагин WP Crontrol — он покажет запланированные задачи и их статус.
- Временно увеличить частоту посещений сайта или использовать системный cron для запуска WP-Cron.
- Включить логирование для функций активации/деактивации, например, записывать в файл или базу, чтобы убедиться, что они срабатывают.
Пример расширения: отключение нескольких плагинов по расписанию
Чтобы отключать сразу несколько плагинов, можно изменить функции следующим образом:
function wpbook_deactivate_plugins_scheduled() {
$plugins = [
'akismet/akismet.php',
'hello-dolly/hello.php'
];
foreach ( $plugins as $plugin ) {
if ( is_plugin_active( $plugin ) ) {
deactivate_plugins( $plugin );
}
}
}
function wpbook_activate_plugins_scheduled() {
$plugins = [
'akismet/akismet.php',
'hello-dolly/hello.php'
];
foreach ( $plugins as $plugin ) {
if ( !is_plugin_active( $plugin ) ) {
activate_plugin( $plugin );
}
}
}
add_action( 'wpbook_deactivate_plugin_event', 'wpbook_deactivate_plugins_scheduled' );
add_action( 'wpbook_activate_plugin_event', 'wpbook_activate_plugins_scheduled' );Так вы сможете гибко управлять группами плагинов.
Советы по безопасности и стабильности
Автоматическое отключение плагинов — мощный инструмент, но требует аккуратности:
- Убедитесь, что отключаемые плагины не критичны для работы сайта в это время.
- Проверяйте логи ошибок, чтобы не пропустить проблемы с активацией/деактивацией.
- Тестируйте расписание на тестовом сайте перед применением на продакшене.
Если хотите расширить функциональность автоматизации, обратите внимание на плагин Clearfy Pro от WPSHOP. Он содержит множество инструментов оптимизации, включая управление плагинами и их нагрузкой.