Управление плагинами в WordPress — одна из ключевых задач для поддержания производительности и безопасности сайта. Часто на сайте накапливается множество плагинов, которые не используются или были установлены для тестирования, но со временем забыты. Они могут замедлять загрузку страниц, создавать конфликты и увеличивать риски безопасности. В этой статье мы разберем, как создать собственный плагин для автоматического обнаружения и отключения неактивных и неиспользуемых плагинов.
Почему важно отключать неиспользуемые плагины
Неиспользуемые плагины могут:
- Увеличивать время загрузки сайта из-за лишних запросов и загрузки скриптов;
- Повышать нагрузку на сервер и базу данных;
- Содержать устаревший код с уязвимостями, создавая угрозу безопасности;
- Вызывать конфликты между активными плагинами;
- Затруднять диагностику и сопровождение сайта.
Регулярная проверка и отключение таких плагинов – простое, но эффективное решение.
Критерии определения неиспользуемых плагинов
Для автоматического отключения плагинов нам нужно определить, что считать «неиспользуемым». Рассмотрим несколько критериев:
- Отсутствие активации – плагин уже отключен. Можно просто удалить, но для безопасности сначала отключим.
- Отсутствие вызова функций или шорткодов – плагин активен, но его функционал не используется в контенте или темах.
- Отсутствие запросов к базе данных или файловой активности – плагин не генерирует запросы, не производит логику.
Для первых двух пунктов нам достаточно проверить активность и использование шорткодов. Третий пункт сложнее и требует профилирования, что выходит за рамки базового плагина.
Создаем плагин wpplugin-auto-disable
Начнем с простого плагина, который:
- Сканирует активные плагины;
- Проверяет наличие шорткодов плагина в постах и страницах;
- Отключает плагин, если шорткоды не найдены и плагин активен.
Структура плагина
Создайте папку wpplugin-auto-disable в wp-content/plugins/ и файл wpplugin-auto-disable.php с таким содержанием:
<?php
/**
* Plugin Name: WPPlugin Auto Disable
* Description: Автоматическое отключение неиспользуемых плагинов по отсутствию шорткодов.
* Version: 1.0
* Author: WPPlugin.ru
*/
// Функция для поиска шорткодов плагина
function wpplugin_auto_disable_find_shortcode($shortcode) {
global $wpdb;
$query = $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
'%[' . $wpdb->esc_like($shortcode) . '%'
);
return $wpdb->get_var($query);
}
// Основная функция проверки и отключения
function wpplugin_auto_disable_check_plugins() {
if (!current_user_can('activate_plugins')) return;
$active_plugins = get_option('active_plugins');
// Здесь задайте список плагинов и их шорткодов для проверки
$plugins_to_check = [
'contact-form-7/wp-contact-form-7.php' => 'contact-form-7',
'woocommerce/woocommerce.php' => 'woocommerce_cart',
'quizle/quizle.php' => 'quizle',
// Добавьте сюда свои плагины и шорткоды
];
$changed = false;
foreach ($plugins_to_check as $plugin_file => $shortcode) {
if (in_array($plugin_file, $active_plugins)) {
$found = wpplugin_auto_disable_find_shortcode($shortcode);
if (!$found) {
deactivate_plugins($plugin_file);
error_log("WPPlugin Auto Disable: Plugin {$plugin_file} deactivated due to missing shortcode [{$shortcode}].");
$changed = true;
}
}
}
if ($changed) {
// Обновим кеш активных плагинов
wp_cache_flush();
}
}
// Запускаем проверку при заходе в админку раз в сутки
function wpplugin_auto_disable_schedule() {
if (!wp_next_scheduled('wpplugin_auto_disable_daily')) {
wp_schedule_event(time(), 'daily', 'wpplugin_auto_disable_daily');
}
}
add_action('wp', 'wpplugin_auto_disable_schedule');
add_action('wpplugin_auto_disable_daily', 'wpplugin_auto_disable_check_plugins');
// Очистка при деактивации плагина
function wpplugin_auto_disable_deactivate() {
wp_clear_scheduled_hook('wpplugin_auto_disable_daily');
}
register_deactivation_hook(__FILE__, 'wpplugin_auto_disable_deactivate');
Подробный разбор кода
Мы создаем расписание с помощью WP Cron, которое раз в сутки вызывает функцию проверки плагинов. В $plugins_to_check задаем соответствия: плагин — шорткод, по которому определяем, используется ли плагин.
Функция wpplugin_auto_disable_find_shortcode ищет в базе данных публикаций наличие шорткода. Если шорткод не найден, плагин отключается с помощью функции deactivate_plugins. В журнал ошибок добавляется запись для логирования.
Расширение функционала: проверка по хукам и классам
Иногда плагины не используют шорткоды, а работают через хуки, виджеты или блоки Gutenberg. Для них можно расширить функционал:
- Проверять наличие зарегистрированных виджетов и используемых на сайте;
- Анализировать вызовы хуков, если есть собственный лог активности;
- Проверять наличие пользовательских блоков в контенте.
Однако такие проверки требуют более сложного анализа и профилирования, что можно реализовать в следующих версиях плагина.
Полезные плагины для оптимизации использования плагинов
Если нужна готовая альтернатива, посмотрите плагин Plugin Check, который помогает найти неиспользуемые плагины. Для оптимизации кэша и ресурсов отлично подойдет Clearfy Pro с расширенным управлением плагинами и очисткой базы.
Как использовать плагин на практике
1. Скопируйте код и создайте свой плагин, как описано выше.
2. Добавьте в массив $plugins_to_check ваши плагины и соответствующие им шорткоды.
3. Активируйте плагин и дождитесь выполнения задачи WP Cron (один раз в сутки).
4. Проверяйте логи ошибок для понимания, какие плагины были отключены.
5. При необходимости дорабатывайте алгоритм проверки для ваших специфичных плагинов.
Заключение
Создание собственного плагина для автоматического отключения неиспользуемых плагинов поможет поддерживать чистоту и производительность вашего WordPress сайта. Такой подход минимизирует риски безопасности и упрощает сопровождение. При необходимости расширяйте функционал, интегрируя проверку по другим критериям активности плагинов.