WordPress函数register_activation_hook用来设置插件激活钩子的回调函数。
在这里可以做一些插件初始化工作,比如建立数据表,导入演示数据等。

函数原型

1
register_activation_hook( string  $file , callable  $function  );

参数

$file (string) 插件文件路径

$function (callable) 回调函数,’activate_PLUGIN’ PLUGIN 是你插件的名称。

源码

1
2
3
4
function register_activation_hook( $file, $function ) {
    $file = plugin_basename( $file );
    add_action( 'activate_' . $file, $function );
}

注意

不要在其他钩子函数中,添加register_activation_hook钩子

在 plugins_loaded 或 init 或其他挂钩中添加register_activation_hook钩子,是不能正常工作的。

1
2
3
4
5
6
//下面这段代码 不能正常工作
function pluginInit() {
    require_once dirname(__FILE__) . '/includes/Activator.php';
    register_activation_hook( __FILE__, 'Activator', 'activate' ) );
}
add_action( 'plugins_loaded', 'pluginInit' );

全局变量必须要显式的声明

据官方解释,插件在“执行激活钩子回调函数”的时候,插件以外声明的变量,插件是访问不到的。除非这个变量明确声明为global。

1
2
3
4
5
6
7
//下面这段代码 不能正常工作
$myvar = 'whatever';
function myplugin_activate() {
  global $myvar;
  echo $myvar; // this will NOT be 'whatever'!
}
register_activation_hook( __FILE__, 'myplugin_activate' );
1
2
3
4
5
6
7
8
//这样才可以
global $myvar;
$myvar = 'whatever';
function myplugin_activate() {
   global $myvar;
   echo $myvar; // this will be 'whatever'
}
register_activation_hook( __FILE__, 'myplugin_activate' );

插件激活后立即执行某些操作

插件激活后会触发activated_plugin钩子。

1
2
3
4
function wpdocs_detect_plugin_activation( $plugin, $network_activation ) {
    // do stuff
}
add_action( 'activated_plugin', 'wpdocs_detect_plugin_activation', 10, 2 );

还有另一方法,就是使用add_option:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 主插件文件 */ 
... 
function my_plugin_activate() { 
  add_option( 'Activated_Plugin', 'Plugin-Slug' ); 
  /* 这里是激活代码 */ 
} 
register_activation_hook( __FILE__, 'my_plugin_activate' ); 
 
function load_plugin() { 
    if ( is_admin() && get_option( 'Activated_Plugin' ) == 'Plugin-Slug' ) { 
        delete_option( 'Activated_Plugin' ); 
 
        /* 激活后立即执行一次 */ 
        // 示例: add_action( 'init', 'my_init_function' ); 
    } 
} 
add_action('admin_init', 'load_plugin');

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。