В процессе работы с WordPress иногда возникает ситуация, когда плагин был удалён напрямую через FTP или файловый менеджер хостинга, но в административной панели он по-прежнему отображается и вызывает ошибки. Это связано с тем, что WordPress хранит активные и установленные плагины в базе данных, и простое удаление файлов плагина не всегда корректно очищает эти записи.
Почему возникает проблема с удалённым плагином в WordPress
Когда вы удаляете плагин через панель управления WordPress, система корректно удаляет записи из базы данных и деактивирует плагин. Но если вы удаляете плагин вручную, например, удаляя папку плагина из wp-content/plugins, в базе данных остаются записи об активном или установленном плагине.
Это приводит к ошибкам, таким как "плагин не найден", "плагин не активен" или к тому, что WordPress пытается загрузить файлы плагина, которых уже нет. В итоге сайт может работать нестабильно или выдавать предупреждения.
Часто для решения этой проблемы используют доступ к phpMyAdmin или другим инструментам управления базой данных, но что делать, если доступа к базе нет или он ограничен?
Удаление записей плагина из базы данных через functions.php
Если нет доступа к phpMyAdmin, можно временно добавить функцию в файл functions.php вашей активной темы, которая удалит записи о плагине из базы данных программным способом.
Например, предположим, что мы хотим удалить плагин с идентификатором akismet/akismet.php. Для этого добавим следующий код:
function wpeasy_remove_plugin_records() {
$plugin = 'akismet/akismet.php';
// Получаем активные плагины
$active_plugins = get_option('active_plugins');
if (($key = array_search($plugin, $active_plugins)) !== false) {
unset($active_plugins[$key]);
update_option('active_plugins', $active_plugins);
}
// Удаляем опции плагина, если есть
delete_option('akismet_version');
// Дополнительно можно удалить другие опции плагина по префиксу
}
add_action('init', 'wpeasy_remove_plugin_records');Этот код убирает указанный плагин из списка активных, тем самым WordPress перестанет пытаться его загрузить. Также можно добавить удаление опций, которые плагин мог записать в базу.
После того, как функция выполнится, и вы удостоверитесь, что плагин удалён из базы, код можно удалить из functions.php.
Пояснения к коду
Функция wpeasy_remove_plugin_records сначала получает список активных плагинов. Если наш плагин в списке есть, он удаляется, и список обновляется. Это критично, потому что WordPress именно из этой опции берет плагины для загрузки.
Удаление опций плагина зависит от конкретного плагина — лучше уточнять, какие именно ключи используются. В примере удаляется опция akismet_version, которая есть у плагина Akismet.
Использование плагинов для безопасного удаления удалённых плагинов
Если вы всё же хотите использовать готовые решения, существуют плагины, которые помогают управлять и очищать базу от остатков плагинов. Вот несколько примеров:
- WP-Optimize — плагин для оптимизации базы данных, который умеет чистить неиспользуемые данные, в том числе от удалённых плагинов.
- Advanced Database Cleaner — позволяет удалять устаревшие записи, включая опции плагинов и таблицы, оставшиеся после удаления.
- Plugins Garbage Collector — более специфичный плагин для поиска и удаления остатков удалённых плагинов.
Однако для работы с такими плагинами всё равно нужен доступ к админке WordPress и права администратора.
Как правильно удалять плагины
Чтобы избежать подобных проблем, всегда удаляйте плагины через админку WordPress. Если такой возможности нет, сначала деактивируйте плагин, а затем удалите файлы. Если плагин был удалён вручную, используйте методы очистки базы данных, чтобы избежать ошибок.
Пример расширенной функции очистки базы данных от следов удалённого плагина
Если вы знаете префикс опций плагина, можно написать универсальную функцию для их удаления:
function wpeasy_delete_plugin_options_by_prefix($prefix) {
global $wpdb;
$like = $wpdb->esc_like($prefix) . '%';
$options = $wpdb->get_col($wpdb->prepare(
"SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s",
$like
));
foreach ($options as $option) {
delete_option($option);
}
}
add_action('init', function() {
wpeasy_delete_plugin_options_by_prefix('akismet_');
});Эта функция удаляет все опции, имена которых начинаются с указанного префикса. Такая очистка помогает избавиться от лишних записей, которые могут замусорить базу и вызвать конфликты.
Заключение по теме удаления удалённых плагинов в WordPress
Удаление плагинов — задача не только файловая, но и связанная с базой данных. Если плагин удалён неправильно, сайт может выдавать ошибки и работать нестабильно. Используйте функции для программного удаления записей о плагинах из базы данных, если нет доступа к phpMyAdmin, или специальные плагины-оптимизаторы.
Помните, что любые действия с базой данных требуют аккуратности и резервных копий, чтобы не потерять важную информацию.