В процессе работы с WordPress на сайте часто накапливается множество плагинов, часть из которых перестает использоваться, но продолжает замедлять сайт или создавать угрозы безопасности. Ручное отключение и удаление всех неактивных плагинов — трудоемкая задача, особенно если сайт большой или их много.
Почему важно отключать неиспользуемые плагины
Неактивные плагины могут создавать несколько проблем:
- Безопасность: старые или заброшенные плагины часто содержат уязвимости, которые хакеры могут использовать.
- Производительность: даже неактивные плагины иногда загружают свои файлы, что увеличивает нагрузку на сервер.
- Управление: большое количество плагинов усложняет обновления и отладку сайта.
Поэтому стоит внедрить механизм, который автоматически отключает плагины, если они не используются длительное время.
Как определить неиспользуемые плагины
Главная сложность — понять, действительно ли плагин не используется. Некоторые плагины активны, но редко вызываются. Для оценки можно использовать несколько критериев:
- Плагин не активен более X дней.
- Плагин не вызывал никаких хуков или действий в течение периода.
- Отсутствие пользовательских данных, создаваемых плагином.
Для простоты можно начать с первого критерия — плагин неактивен более 30 дней.
Пример кода: автоматическое отключение неактивных плагинов через 30 дней
В этом примере мы реализуем функцию wpbloger_auto_deactivate_plugins, которая проверяет дату последней активации плагина и автоматически деактивирует плагин, если он неактивен более 30 дней.
function wpbloger_auto_deactivate_plugins() {
if (!current_user_can('activate_plugins')) {
return;
}
$inactive_plugins = get_option('inactive_plugins', []);
$threshold = 30 * DAY_IN_SECONDS; // 30 дней
$now = time();
foreach ($inactive_plugins as $plugin_file) {
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file);
$last_deactivated = get_option('wpbloger_plugin_deactivated_' . md5($plugin_file), 0);
// Если плагин неактивен более 30 дней и дату деактивации мы не записывали ранее
if ($last_deactivated === 0) {
update_option('wpbloger_plugin_deactivated_' . md5($plugin_file), $now);
continue;
}
// Если прошло более 30 дней с момента деактивации
if (($now - $last_deactivated) > $threshold) {
// Дополнительно можно отправлять уведомление администратору
// Удаляем плагин
if (is_plugin_inactive($plugin_file)) {
deactivate_plugins($plugin_file);
// Можно также удалить плагин через WP Filesystem API
}
}
}
}
add_action('admin_init', 'wpbloger_auto_deactivate_plugins');
Этот код при каждой загрузке админки проверяет неактивные плагины. Если плагин неактивен и дата деактивации была зафиксирована более 30 дней назад, он остается деактивированным. Можно дописать логику для удаления плагина автоматически, но это рискованно и требует подтверждения.
Оптимизация и уведомления
Чтобы не перегружать сервер, лучше запускать проверку по крону:
function wpbloger_schedule_plugin_check() {
if (!wp_next_scheduled('wpbloger_daily_plugin_check')) {
wp_schedule_event(time(), 'daily', 'wpbloger_daily_plugin_check');
}
}
add_action('wp', 'wpbloger_schedule_plugin_check');
add_action('wpbloger_daily_plugin_check', 'wpbloger_auto_deactivate_plugins');
Также полезно уведомлять администратора о том, какие плагины были отключены или давно неактивны. Для этого используйте функцию wp_mail с отчетом.
Готовые плагины для управления неиспользуемыми плагинами
Если хочется готовое решение, обратите внимание на плагины:
- Clearfy Pro — позволяет оптимизировать и управлять плагинами, включая отключение ненужных.
- WPRemark — для мониторинга активности плагинов и уведомлений.
Заключение
Автоматизация отключения неиспользуемых плагинов — важный элемент поддержания безопасности и производительности сайта на WordPress. С помощью приведенного кода и рекомендаций вы сможете внедрить такой механизм своими силами, а при желании — использовать профессиональные решения с WPSHOP.