
Периодически попадаются плагины, которые не удаляют свое прибывание на сайте/блоге после удаления. Если вы вдруг решили написать плагин, то позаботьтесь о его корректном удалении.
Хук деинсталяции (uninstall) срабатывает, когда пользователь удаляет плагин, нажимая на ссылку "удалить" (delete) на странице плагинов. Преимущества использования такого хука в том, что WordPress заранее подготовлен к удалению плагина. Под словом "подготовлен" имеется ввиду, что всякие действия, которые могут мешать удалению не будут срабатывать.
Возможно кажется не очень удобным удалять плагин, чтобы полностью его деактивировать. В большинстве случаев этот метод безобиден. Если удаляемый плагин находиться в репозитории плагинов WordPRess, то мы всегда можно заново закачать и активировать плагин не выходя из админки.
2 метода деинсталяции плагинов
Разработчиками WordPress предусмотрено 2 варианта полностью деинсталировать плагин:
- Создать файл uninstall.php в корневой директории плагина;
- Использовать хук деинсталяции, который срабатывает во время удаления плагина.
Метод 1: uninstall.php
Этот метод более предпочтительный. Если во время удаления плагина WordPress найдет файл unistall.php в его директории, то будет выполнен код этого файла, при этом хук деактивации работать уже не будет. Важным моментом является обязательное использования проверки констант ABSPATH и the WP_UNINSTALL_PLUGIN в этом файле. Нужно это для обеспечения безопасности, чтобы невозможно было орабтить к этому файлу на прямую.
Файлы плагина будут удалены после того как сработает код этого файла (unistall.php). В этом файле нужно удалить все что связано с плагином: опции, таблицы БД, произвольные поля и т.д. Важно понимать что этот процесс необратим!
Как должен выглядеть unistall.php:
<?php if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') )
exit();
// проверка пройдена успешно. Начиная от сюда удаляем опции и все сотальное
delete_option('my_option');
Метод 2: деинсталяция плагин через хук (register_uninstall_hook)
Этот метод работает иначе чем функции активации/деактивации плагина.
Когда плагин удаляется и в его каталоге нет файла uninstall.php, код плагина будет запущен еще 1 раз, чтобы обработать этот хук. Этот метод не самый лучший, т.к. очередное включение плагина, может установить его опции после того, как сработает хук, удаляющий эти самые опции. Поэтому если есть возможность лучше использовать первый метод.
Пример кода деинсталяции плагина через хук:
register_uninstall_hook(__FILE__, 'my_uninstall_hook');
function my_uninstall_hook(){
delete_option('my_option');
}
Иногда можно удалять опции плагина в момент его деактивации, т.е. не обязательно когда плагин удаляется (сначала деактивируется, затем если нужно удаляется). В таком случае лучше использовать функцию-хук:
register_deactivation_hook(__FILE__, 'my_uninstall_hook');
function my_uninstall_hook(){
delete_option('my_option');
}
Я неоднократно встречал плагины, которые не удаляют свое прибывание после удаления плагина, поэтому будьте бдительны. Используйте как можно меньше плагинов, тестируйте их сначала на каком-нибудь подопытном блоге.
П.С. Все выше описанное справедливо для версий WordPress 2.7 и выше.
- Предыдущие по меткам
- Предыдущие записи
- 3 способа построения циклов в WordPress ← 20.Июн.2011 // 24
- Класс WordPress для работы с Базой Данных (wpdb сlass) ← 22.Дек.2010 // 19
- Оптимизация производительности WordPress за счет постоянных ссылок (теория) ← 24.Окт.2010 // 7
- 3 способа построения циклов в WordPress ← 20 Июнь 2011 // 24
- Блок произвольных полей в админке WordPress своими руками ← 8 Июнь 2011 // 31
- Динамический архив блога с использованием jQuery (Ajax) ← 12 Май 2011 // 34
Тогда вопрос - как найти и удалить всё то, что было оставлено плагинами?
Одно дело когда они создают таблицы в БД - лишнюю таблицу нашел не принадлежащую вордпрессу и снёс её. Но есть плагины которые настройки хранят в базе в вордпрессовских таблицах - в wp_options или wp_postmeta
Сложный вопрос. Я обычно перед удалением плагина проверяю удаляет ли он свое прибывание. Если нет, то открываю код, смотрю какие настройки он добавляет и удаляю их вручную через delete_option().
Если ситуация запущена, то помнется мне был какой-то плагин честично решающий эту проблему. Нашел: clean options. Только юзайте аккуратно или вообще не юзайте не так это страшно.
Я в свое время пользовался плагином Clean Options. Правда я не до конца с ним разобрался. Может вам больше повезёт
Здравствуйте. Не могли дать ссылку на плагин Clean Options. У меня скопилось столько много мусора от удаленных плагинов в базе данных. Спасибо.
Вроде этот плагин имелся ввиду http://wordpress.org/extend/plugins/clean-options/.
Спасибо вам Kama за чудесный плагин. Не знал, что есть правильное решение к проблеме накопленного мусора. Вы облегчили мою работу.