uninstall.php файл в плагине для очистки БД
Я знаю, что WordPress предоставляет плагины хороший способ очистить базу данных, если плагин удален, предоставив крючок uninstall.php
. Вам просто нужно ввести код очистки, и он работает.
Но мой вопрос в том, что я видел пару плагинов, которые используют функции, определенные в их файле плагинов внутри файла uninstall.php
. Я понимаю, что если плагин уже отключен, и пользователь удаляет его после этого, то эти функции могут быть недоступны доступный.
Верно ли мое предположение или есть какая-то магия WordPress, о которой я не знаю?
1 answers
Я видел пару плагинов, которые используют функции, определенные в их файле плагинов внутри 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
существует, он включается, выполняется и заканчивается история.
Если файл uninstall.php
не существует, и если мы зарегистрировали хук удаления, основной файл плагина будет включен: include WP_PLUGIN_DIR . '/' . $file;
, чтобы сделать доступным обратный вызов - и, таким образом, сделать доступной и другую функцию.
Мы могли бы сделать некоторые include
в нашем файле uninstall.php
, но настолько ли сложен процесс удаления, чтобы в этом нуждаться?
Цитата из связанной с wp-хакерами темы (мой акцент):
[T] крючок для удаления хранится в базе данных, он не определяется во время выполнения. Ваш плагин не получит
init
/plugins_loaded
/admin_init
, срабатывание крючка etc при вызове крючка удаления, это чистый "Вот некоторый АВТОНОМНЫЙ код для запуска для очистки"