При разработке и отладке WordPress-сайтов часто возникает необходимость временно активировать плагины только на ограничённый период, например, для тестирования новой функциональности или диагностики ошибок. В стандартной админке WordPress такой возможности нет: плагин либо включён, либо выключен, и включение требует ручного подтверждения. В этой статье разберём, как реализовать временную активацию плагинов с автоматическим отключением через заданное время, используя функции PHP и хуки WordPress.
Почему нужна временная активация плагинов?
Временная активация полезна в нескольких случаях:
- Тестирование новых плагинов или обновлений без риска оставить их включёнными навсегда.
- Диагностика и отладка проблем на сайте с минимальным вмешательством в общую конфигурацию.
- Автоматизация процесса включения плагинов для краткосрочных задач, например, при проведении акций или специальных функций.
Реализация такой функции позволяет сэкономить время и снизить риски при работе с большим количеством плагинов.
Общий принцип реализации временной активации плагина
Идея простая: при активации плагина мы ставим в базу данных метку времени с датой и временем, когда плагин должен автоматически деактивироваться. При каждом запросе сайта проверяем эту метку, и если текущая дата превысила дату отключения — отключаем плагин программно.
Для этого понадобится:
- Добавить при активации плагина запись с временем деактивации.
- Создать функцию, которая проверяет эту дату и отключает плагин, если срок истёк.
- Подключить эту функцию к хукам WordPress, чтобы проверка происходила при каждом запросе (или по расписанию).
Пример кода: временная активация плагина на 24 часа
Рассмотрим, как реализовать описанную логику на примере собственного плагина. В этом примере плагин активируется и автоматически отключается через 24 часа.
<?php
/**
* Plugin Name: WPCourse Temporary Activation
* Description: Плагин с временной активацией на 24 часа
* Version: 1.0
* Author: WPCourse
*/
// Время жизни активации в секундах (24 часа)
define('WPCOURSE_TEMP_ACTIVATION_LIFETIME', 24 * 60 * 60);
// Сохраняем время активации с датой отключения
function wpcourse_temp_activation_activate() {
$deactivation_time = time() + WPCOURSE_TEMP_ACTIVATION_LIFETIME;
update_option('wpcourse_temp_activation_deactivation_time', $deactivation_time);
}
register_activation_hook(__FILE__, 'wpcourse_temp_activation_activate');
// Проверяем время деактивации и отключаем плагин если срок истёк
function wpcourse_temp_activation_check() {
$deactivation_time = get_option('wpcourse_temp_activation_deactivation_time');
if ($deactivation_time && time() > $deactivation_time) {
// Отключаем плагин
deactivate_plugins(plugin_basename(__FILE__));
// Убираем опцию, чтобы не отключать повторно
delete_option('wpcourse_temp_activation_deactivation_time');
// Можно добавить лог или уведомление администратора
error_log('WPCourse Temporary Activation: плагин автоматически деактивирован по истечении срока.');
}
}
add_action('plugins_loaded', 'wpcourse_temp_activation_check');
Как использовать временную активацию для других плагинов
Приведённый выше пример показывает принцип работы на собственном плагине. Но как сделать временную активацию для сторонних плагинов? Есть несколько вариантов:
1. Создать отдельный плагин-менеджер
Можно написать вспомогательный плагин, который хранит список плагинов с датами деактивации и при каждом запросе проверяет их сроки. Если срок вышел — отключает соответствующий плагин через deactivate_plugins(). Пример кода:
function wpcourse_temp_manager_check_plugins() {
$plugins = get_option('wpcourse_temp_manager_plugins', []);
$changed = false;
foreach ($plugins as $plugin_file => $timestamp) {
if (time() > $timestamp) {
if (is_plugin_active($plugin_file)) {
deactivate_plugins($plugin_file);
error_log('WPCourse Temporary Manager: отключён плагин ' . $plugin_file);
}
unset($plugins[$plugin_file]);
$changed = true;
}
}
if ($changed) {
update_option('wpcourse_temp_manager_plugins', $plugins);
}
}
add_action('plugins_loaded', 'wpcourse_temp_manager_check_plugins');
// Функция для добавления плагина в список временной активации
function wpcourse_temp_manager_activate_plugin($plugin_file, $duration_seconds) {
$plugins = get_option('wpcourse_temp_manager_plugins', []);
$plugins[$plugin_file] = time() + $duration_seconds;
update_option('wpcourse_temp_manager_plugins', $plugins);
activate_plugin($plugin_file);
}
Так можно динамически активировать любой плагин на заданное время из кода.
2. Использовать WP-CLI для активации с таймером
Если есть доступ к серверу, можно написать скрипты на WP-CLI, которые активируют плагин и регистрируют задачу cron для его отключения. Это более сложный, но мощный способ.
Тонкости и рекомендации по реализации
При внедрении временной активации важно учитывать несколько моментов:
- Проверка отключения плагина выполняется при загрузке плагинов (
plugins_loaded) — это гарантирует, что плагин ещё активен и может быть отключён. - Время отключения хранится в опции базы данных — это удобно и надёжно.
- Для массовой временной активации разных плагинов удобнее использовать отдельный плагин-менеджер, чтобы централизованно управлять списком.
- Автоматическое отключение плагинов может нарушить работу сайта, если плагин критически важен — используйте с осторожностью и тестируйте на стендах.
Пример использования временной активации с плагином WPRemark
Пусть нужно временно активировать плагин WPRemark для проведения теста отзывов. Через код можно сделать так:
if (!is_plugin_active('wpremark/wpremark.php')) {
// Активируем WPRemark на 12 часов
wpcourse_temp_manager_activate_plugin('wpremark/wpremark.php', 12 * 60 * 60);
}
После 12 часов плагин автоматически отключится, и не потребуется ручное вмешательство.
Альтернативные плагины для тестирования и временной активации
Пока нет широко известных плагинов для точечной временной активации плагинов, но для упрощения тестирования можно использовать такие расширения как:
- Plugin Organizer — позволяет управлять порядком и условиями загрузки плагинов.
- WP Rollback — помогает быстро откатываться к предыдущим версиям плагинов для тестирования.
- Clearfy Pro — частично оптимизирует и отключает ненужные функции WordPress, что полезно при тестах.
Однако для именно временной активации лучше использовать кастомный код, описанный выше.