Я делаю плагин для WordPress. Какие типичные вещи я должен включить в функцию удаления?
Например, я должен удалить все таблицы, которые я создал в функции установки?
Очистить ли мои записи опций?
Что-нибудь еще?
plugins
activation
uninstallation
deactivation
redconservatory
источник
источник
Ответы:
Есть три разных крючка. Они запускаются в следующих случаях:
Как безопасно запускать функции во время сценариев
Ниже показаны правильные способы безопасного подключения функций обратного вызова, которые запускаются во время упомянутых действий.
Как вы могли бы использовать этот код в плагине, который использует
Я покажу три различных демо-плагина, которые вы можете просмотреть, а затем внедрит код в свои собственные плагины.
Важное примечание заранее!
Поскольку эта тема чрезвычайно сложная и очень подробная, и в ней более десятка случаев, этот ответ никогда не будет идеальным. Я буду продолжать улучшать его с течением времени, так что заходите регулярно.
(1) Активировать / деактивировать / удалить плагины.
Обратные вызовы установки плагина запускаются ядром, и вы не имеете никакого влияния на то, как ядро делает это. Есть несколько вещей, которые нужно иметь в виду:
echo/print
ничего (!) Во время обратных вызовов. Это приведет кheaders already sent
сообщению, и ядро порекомендует деактивировать и удалить ваш плагин ... не спрашивайте: я знаю ...exit()
утверждения ко всем различным обратным вызовам, чтобы вы могли получить представление о том, что на самом деле происходит. Просто раскомментируйте их, чтобы увидеть, как все работает.__FILE__ != WP_PLUGIN_INSTALL
и (если нет: прервать!), Чтобы увидеть, действительно ли кто-то удаляет плагин. Я бы порекомендовал просто вызыватьon_deactivation()
обратные вызовы во время разработки, чтобы вы сэкономили время, которое понадобится, чтобы вернуть все обратно. По крайней мере, это то, что я делаю.defined( 'ABSPATH' ) OR exit;
wp_die()
экране с запросом соответствующих разрешений (и если вы хотите повторить попытку ... да, конечно ). Это происходит, когда ядро перенаправляет вас, устанавливает текущее$GLOBALS['wp_list_table']->current_action();
значениеerror_scrape
и затем проверяет реферерcheck_admin_referer('plugin-activation-error_' . $plugin);
, где$plugin
находится$_REQUEST['plugin']
. Таким образом, перенаправление происходит при половине загрузки страницы, и вы получаете эту проводную полосу прокрутки и экран, на котором отображается желтое окно уведомления / сообщения администратора. Если это произойдет: сохраняйте спокойствие и просто найдите ошибку сexit()
помощью пошаговой отладки.(A) Плагин простых функций
Помните, что это может не сработать, если вы перехватите обратные вызовы до определения функции.
(B) Архитектура на основе классов / ООП
Это самый распространенный пример современных плагинов.
(C) Архитектура на основе классов / ООП с внешним объектом настройки
Этот сценарий предполагает , что вы получили главный файл плагина , и второй файл с именем
setup.php
в подкаталоге плагина под названиемinc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Это будет работать и тогда, когда папка плагина находится за пределами структуры папок WP по умолчанию, а также когда папка содержимого переименована или если ваш установочный файл назван по-другому. Толькоinc
папка должна иметь такое же имя и расположение относительно корневого каталога плагинов.Примечание. Вы можете просто взять три
register_*_hook()*
функции и классы и поместить их в свой плагин.Основной файл плагина:
Файл установки:
(2) Обновления плагинов
Если вы напишите плагин, который имеет свою собственную таблицу или параметры БД, могут возникнуть ситуации, когда вам нужно что-то изменить или обновить.
К сожалению, пока нет возможности запустить что-либо при установке плагина / темы или обновлении / обновлении. Рад, что есть обходной путь: подключите пользовательскую функцию к пользовательской опции (да, это хромая - но она работает).
Источник
Эта функция обновления - не очень хороший / хорошо написанный пример, но, как сказано: это пример, и техника работает хорошо. Улучшит это с более поздним обновлением.
источник
check_admin_referer()
. Они не нуждаются в дезинфекции, потому что ядро не делает это само по себе и в любом случае будет сравнивать его с неанизированными$_REQUEST
значениями. Но если они начинают плакать как маленькие девочки из-за этого, просто используйтеfilter_var()
илиesc_attr()
на это.Чтобы проверить текущую систему на наличие необходимых функций, таких как версия PHP или установленные расширения, вы можете использовать что-то вроде этого:
Тест с проверкой на PHP 5.5:
источник
register_activation_hook
- почему бы не использовать его? Также будет ли этот огонь до или послеregister_activation_hook
и сработает,register_activation_hook
даже если вышеперечисленное не пройдет?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
в активационную зацепку, и плагин активируется без выполнения проверок. , ,admin_notices
.