Intereting Posts
Выбор цвета для сообщений и страниц Недопустимая разметка списка вложенных списков TinyMCE Лучший способ подключить пользовательский URL-адрес? save_post hook – заголовки уже отправлены? Echo User Name от пользователя с большинством комментариев сегодняшнего дня? WP_Editor – настройка расположения рендеринга на странице Как сделать мои темы совместимыми с разными версиями WordPress? Создайте сайт в стиле панели инструментов (а не панель инструментов WordPress) – есть ли тема? Почему страница архива не может показывать полный контент? Настройка пользовательской электронной почты От имени и адреса электронной почты в wp_email () Почему мои пользовательские метабокс не обновляют мета-сообщение? Я пытаюсь добавить div только для одной категории Создание сетки / списка в WordPress Archive Разбивает ли он GPL, если вы удаляете файл license.txt перед загрузкой? add_filter несколько раз с различными функциями аддона?

uninstall.php-файл в плагине для очистки БД

Я знаю, что WordPress предоставляет плагинам хороший способ очистить db, если плагин удален, предоставив hook. Вам просто нужно поместить очищающий код, и он работает.

Но мой вопрос: я видел пару плагинов, которые используют функции, определенные в их файле Plugin внутри файла uninstall.php . Я понимаю, что если плагин уже отключен и пользователь удаляет его после этого, эти функции могут быть недоступны.

Является ли мое предположение правильным или есть волшебство WordPress, о котором я не знаю?

Я видел пару плагинов, которые используют функции, определенные в их файле Plugin внутри файла uninstall.php.

Это не сработает, если uninstall.php вызывает одну из функций плагина, это приведет к Fatal error: Call to undefined function . Если … (пояснил ниже).

Это, с другой стороны, работает:

 <?php /* Plugin Name: Test Uninstall */ register_activation_hook( __FILE__, 'test_activate' ); register_uninstall_hook( __FILE__, 'test_uninstall' ); function test_activate() { update_option( 'testing_uninstall', true ); } function test_uninstall() { test_delete_me(); } function test_delete_me() { delete_option( 'testing_uninstall' ); } 

Мы можем понять, почему в функции uninstall_plugin() . Если unistall.php существует, он включается, исполняется и заканчивается.
Если файл include WP_PLUGIN_DIR . '/' . $file; не существует, и если мы зарегистрировали крючок удаления, будет включен основной файл плагина: include WP_PLUGIN_DIR . '/' . $file; include WP_PLUGIN_DIR . '/' . $file; , чтобы сделать обратный вызов доступным, и, таким образом, сделать другую функцию также доступной.

Мы могли бы include некоторые из include в наш файл uninstall.php , но процесс удаления настолько сложный, насколько это необходимо?

Цитата из связанной wp-hackers thread (мой акцент):

[T] он удаляет крючок, который хранится в базе данных, но не определяется во время выполнения. Ваш плагин не получит init / plugins_loaded / admin_init и т. admin_init , plugins_loaded admin_init крючок удаления, это чистый «Heres some SELF CONTAINED code, который запускается для очистки»,