Я знаю, что 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, который запускается для очистки»,