我在卸载中看到了几个插件,它们使用插件文件中定义的函数。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
文件,但卸载过程是否如此复杂以至于需要此文件?
引自related wp-hackers thread (我强调):
[T] 卸载挂钩存储在数据库中,在运行时不确定。您的插件将无法接收init
/plugins_loaded
/admin_init
, etc钩子在调用卸载钩子时触发,这是一个"Heres some SELF CONTAINED code to run to clean up"