如何正确设置激活挂钩

时间:2018-09-13 作者:Cyclonecode

我正在尝试为我的插件注册一个激活挂钩。插件使用类,实际的激活方法保存在单独的管理类中。阅读文档register_activation_hook() 它似乎是第一个参数$file 应始终是主插件文件的文件:

wp-content/plugins目录中主插件文件的路径。完整路径将起作用。

这两个类被保存在不同的文件中,看起来像这样。

这是主插件文件:

<?php 
/* my-plugin.php */

include_once(plugin_dir_path(__FILE__) . \'/admin/my-plugin-admin.php\');

register_activation_hook(__FILE__, array(\'MyPluginAdmin\', \'activate\'));

class MyPlugin {
}
这是管理部分,其中还包含激活例程:

<?php
/* my-plugin-admin.php */

class MyPluginAdmin {
  public static function activate() {
    // This method is called in both cases,
    // but in the first example a php warning is generated
  }
}
我的问题是静电activate 方法实际上是在激活时触发的,但我仍然收到一条php警告,如下所示:

PHP Warning:  call_user_func_array() expects parameter 1 to be a valid callback, class \'MyPluginAdmin\' not found in /var/www/html/wp/wp-includes/class-wp-hook.php on line 287
PHP Stack trace:
1. {main}() /var/www/html/wp/wp-admin/plugins.php:0
2. activate_plugin($plugin = \'my-plugin/my-plugin.php\', $redirect = \'http://localhost/wp/wp-admin/plugins.php?error=true&plugin=my-plugin%2Fmy-plugin.php\', $network_wide = FALSE, $silent = *uninitialized*) /var/www/html/wp/wp-admin/plugins.php:43
3. do_action($tag = \'activate_my-plugin/my-plugin.php\', $arg = FALSE) /var/www/html/wp/wp-admin/includes/plugin.php:586
4. WP_Hook->do_action($args = array (0 => FALSE)) /var/www/html/wp/wp-includes/plugin.php:453
5. WP_Hook->apply_filters($value = \'\', $args = array (0 => FALSE)) /var/www/html/wp/wp-includes/class-wp-hook.php:311
6. call_user_func_array:{/var/www/html/wp/wp-includes/class-wp-hook.php:287}(array (0 => \'MyPluginAdmin\', 1 => \'activate\'), array (0 => FALSE)) /var/www/html/wp/wp-includes/class-wp-hook.php:287
如果我把电话改成register_activation_hook() 进入:

register_activation_hook(plugin_dir_path(__FILE__) . \'/admin/my-plugin-admin.php\', array(\'MyPluginAdmin\', \'activate\'));
然后警告信息消失了。所以,我的问题是什么是正确的使用方法register_activation_hook() 为什么它在上述两种情况下都能工作,尽管它在第一种情况下会发出警告?

1 个回复
SO网友:Matt

您的第一个示例看起来很正确。但是有一个拼写错误,因此class \'MyPluginAdmin\' not found.

您包括myplugin-admin.php, 但是你的问题似乎表明,这个页面实际上是my-plugin-admin.php (用催眠)。

如果我更正输入错误并运行代码,则不会出现警告。

编辑(此操作正确):

我的插件。php:

<?php 
/*
Plugin Name: my-plugin.php
*/

include_once(plugin_dir_path(__FILE__) . \'/my-plugin-admin.php\');

register_activation_hook(__FILE__, array(\'MyPluginAdmin\', \'activate\'));

class MyPlugin {
}
我的插件管理员。php:

<?php
/* my-plugin-admin.php */

class MyPluginAdmin {
  public static function activate() {
  }
}
使用my-plugin.phpmy-plugin-admin.php 两者都在同一目录中。做my-plugin-admin.php 是否具有正确的权限?

结束

相关推荐

如何在编写OOP时等待WordPress内核加载?

我想创建一个助手重定向函数,如下所示:/** * Just an example of using redirect() */ public function validate_something() { if (1 == 0) { $this->redirect(\'register\'); } } 但是,在public function redirect(), 我想使用一些只有在WordPres