В работе с WordPress иногда возникает необходимость временно отключать определённые плагины по расписанию. Например, если плагин нагружает сервер в часы пик, или нужен только в определённые дни. В этой статье мы рассмотрим, как реализовать автоматическое включение и отключение плагинов в WordPress по расписанию с помощью кода и плагинов.
Почему может понадобиться автоматическое отключение плагинов
Некоторые плагины могут быть ресурсоёмкими, либо использоваться только в определённые периоды. Например, плагин для сбора статистики, который нужен только ночью, или плагины для проведения акций, которые активны в определённые даты. Автоматизация этого процесса позволяет уменьшить нагрузку на сайт и повысить его производительность без постоянного ручного контроля.
Также автоматическое отключение полезно для временных функциональностей, которые не должны влиять на сайт постоянно.
Как управлять плагинами программно в WordPress
WordPress предоставляет функции для активации и деактивации плагинов в коде:
activate_plugin( $plugin )— активирует плагин.deactivate_plugins( $plugins )— деактивирует один или несколько плагинов.
Аргументом для этих функций является путь к файлу плагина относительно каталога wp-content/plugins.
Для примера, чтобы отключить плагин Contact Form 7, нужно вызвать:
deactivate_plugins('contact-form-7/wp-contact-form-7.php');Чтобы активировать —
activate_plugin('contact-form-7/wp-contact-form-7.php');Но делать это напрямую в коде без расписания неудобно, поэтому используем WP-Cron для планирования задач.
Создание расписания для отключения плагинов с помощью WP-Cron
WP-Cron — встроенный в WordPress механизм планирования событий. С его помощью можно запускать функции по расписанию.
Для начала создадим функцию, которая будет отключать плагин:
function wpaddons_deactivate_plugin_scheduled() {
if ( ! is_plugin_active('contact-form-7/wp-contact-form-7.php') ) {
return;
}
deactivate_plugins('contact-form-7/wp-contact-form-7.php');
}Теперь зарегистрируем событие, которое будет срабатывать, например, ежедневно в 23:00:
function wpaddons_schedule_plugin_deactivation() {
if ( ! wp_next_scheduled('wpaddons_daily_plugin_deactivation') ) {
wp_schedule_event(strtotime('23:00:00'), 'daily', 'wpaddons_daily_plugin_deactivation');
}
}
add_action('wp', 'wpaddons_schedule_plugin_deactivation');
add_action('wpaddons_daily_plugin_deactivation', 'wpaddons_deactivate_plugin_scheduled');Таким образом, каждый день в 23:00 будет отключаться Contact Form 7.
Для включения плагина по расписанию создадим аналогичную функцию:
function wpaddons_activate_plugin_scheduled() {
if ( is_plugin_active('contact-form-7/wp-contact-form-7.php') ) {
return;
}
activate_plugin('contact-form-7/wp-contact-form-7.php');
}
function wpaddons_schedule_plugin_activation() {
if ( ! wp_next_scheduled('wpaddons_daily_plugin_activation') ) {
wp_schedule_event(strtotime('06:00:00'), 'daily', 'wpaddons_daily_plugin_activation');
}
}
add_action('wp', 'wpaddons_schedule_plugin_activation');
add_action('wpaddons_daily_plugin_activation', 'wpaddons_activate_plugin_scheduled');Теперь плагин будет автоматически включаться каждый день в 06:00.
Создание более гибкого расписания с пользовательскими интервалами
Стандартные интервалы WP-Cron ограничены (раз в час, день и т.д.). Чтобы задать произвольные интервалы, можно добавить их через фильтр:
function wpaddons_custom_cron_intervals( $schedules ) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __( 'Каждые 5 минут', 'wpaddons' )
);
return $schedules;
}
add_filter( 'cron_schedules', 'wpaddons_custom_cron_intervals' );Затем использовать такой интервал при планировании:
wp_schedule_event( time(), 'every_five_minutes', 'wpaddons_custom_event_hook' );Так можно гибко настраивать частоту проверки и включения/отключения плагинов по нужному расписанию.
Использование плагинов для управления активацией плагинов по расписанию
Если хочется избежать программирования, можно использовать плагины, которые расширяют возможности WP-Cron и управления плагинами:
- Plugin Organizer — позволяет включать и отключать плагины на страницах, но не по расписанию;
- WP Crontrol — расширенный менеджер WP-Cron, даёт возможность создавать и управлять задачами;
- Advanced Cron Manager — удобный интерфейс для управления событиями WP-Cron.
Для автоматизации включения/отключения плагинов по расписанию можно комбинировать эти инструменты с собственными PHP-скриптами.
Практический пример: расписание для плагина Clearfy Pro с wpaddons
Допустим, вы используете плагин Clearfy Pro, который нужен только в рабочее время — с 9:00 до 18:00. Вот пример кода, который будет включать Clearfy Pro в 9 утра и отключать в 18 вечера:
function wpaddons_activate_clearfy() {
if ( ! is_plugin_active('clearfy-pro/clearfy-pro.php') ) {
activate_plugin('clearfy-pro/clearfy-pro.php');
}
}
function wpaddons_deactivate_clearfy() {
if ( is_plugin_active('clearfy-pro/clearfy-pro.php') ) {
deactivate_plugins('clearfy-pro/clearfy-pro.php');
}
}
// Планируем активацию в 9:00
if ( ! wp_next_scheduled('wpaddons_activate_clearfy_hook') ) {
wp_schedule_event(strtotime('09:00:00'), 'daily', 'wpaddons_activate_clearfy_hook');
}
add_action('wpaddons_activate_clearfy_hook', 'wpaddons_activate_clearfy');
// Планируем деактивацию в 18:00
if ( ! wp_next_scheduled('wpaddons_deactivate_clearfy_hook') ) {
wp_schedule_event(strtotime('18:00:00'), 'daily', 'wpaddons_deactivate_clearfy_hook');
}
add_action('wpaddons_deactivate_clearfy_hook', 'wpaddons_deactivate_clearfy');Этот пример можно адаптировать под любые плагины и временные зоны, учитывая особенности вашего сервера.
Важные нюансы и рекомендации
1. WP-Cron запускается только при посещении сайта, если трафик низкий, события могут отложиться. Для точного расписания лучше настроить системный cron на сервере, который будет вызывать wp-cron.php по расписанию.
2. При активации и деактивации плагинов могут возникать ошибки, если плагины зависят друг от друга. Следите за логами и тестируйте на тестовом сервере.
3. Используйте функции is_plugin_active() из WordPress, чтобы избежать повторной активации или деактивации.
4. Если нужно отключать плагины не полностью, а лишь на определённых страницах, рассмотрите плагин Expert Review или аналогичные инструменты.
Автоматизация включения и отключения плагинов по расписанию — мощное средство оптимизации работы WordPress-сайта, позволяющее снизить нагрузку и управлять функционалом гибко и удобно.