我正在编写我的第一个WordPress插件,但register_activation_hook遇到了问题......我想要的是在register_activation_hook中声明一个变量,并在其中一个菜单页面上回显它。
我已经将我的代码分解为单独的文件,并在下面包含了以下 2 个文件的简短版本:
define('TEST_PLUGIN', rtrim( plugin_dir_path( __FILE__ ), '/' ));
function test_plugin_install() {
$test="TEST";
}
register_activation_hook( __FILE__, 'test_plugin_install' );
add_action( 'admin_menu', 'test_plugin_add_menu' );
function test_plugin_add_menu() {
add_menu_page( 'Test Plugin Page', 'Test Plugin', 'manage_options', 'test_plugin', 'test_plugin_settings' );
}
function test_plugin_settings() {
require( TEST_PLUGIN_DIR . '/test_plugin_settings.php' );
}
在test_plugin_settings.php中,我使用:
global $test;
echo $test;
我知道test_plugin_settings.php工作,因为我的代码具有选项卡和其他内容,这些内容在菜单页面中呈现。但是,$test变量不会。
同样在函数 test_plugin_install() 中,我还创建了 sql 表...创建,所以我知道有效。 有趣的是,sql 仅在第一次安装插件时才执行,即删除插件目录并清除 sql 表。
这让我认为register_activation_hook只是第一次调用,而不是在插件刚刚停用然后重新激活时调用。
这是对的吗?
register_activation_hook只会在activation
上触发,并用于安装一些选项或创建表,而admin_menu
需要在admin_init
上触发(为wp-admin
初始化某些东西的操作)。