php – 插件激活挂钩无法在wordpress中工作
我正在尝试开发我的第一个Wordpress插件,并且我在第一阶段就陷入了困境.我正在尝试在插件激活时设置一些选项和数据库表,但没有运气.无论我做什么,插件都会激活,但数据库不受影响且选项不存储在DB中.我尝试在构造函数中回显,但似乎它永远不会到达它.我在WP中激活了调试,但没有报告错误.该功能没有被挂钩.有人能发现我的代码有什么问题吗?
在此先感谢您的帮助.
class Myplugin {
private static $instance;
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
register_activation_hook( __FILE__, array( &$this, 'plugin_activate' ) );
}
public function plugin_activate() {
if ( version_compare( get_bloginfo( 'version' ), '3.8.2', ' < ' ) ) {
deactivate_plugins( basename( __FILE__ ) );
} else {
$rlm_rsvplus_options = array(
'db_version' => '1.0',
'event_name' => '',
'end_date' => '',
);
update_option( 'rlm_myplugin_options', $rlm_myplugin_options );
require_once( "includes/rlm_myplugin_db_setup.php" );//It never reaches this file.
}
}
}
$myplugin = Myplugin::get_instance();
解决方法:
register_activation_hook调用需要在类本身之外.
就像是:
class Myplugin {
private static $instance;
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
// do other stuff here
}
public function plugin_activate() {
if ( version_compare( get_bloginfo( 'version' ), '3.8.2', ' < ' ) ) {
deactivate_plugins( basename( __FILE__ ) );
} else {
$rlm_rsvplus_options = array(
'db_version' => '1.0',
'event_name' => '',
'end_date' => '',
);
update_option( 'rlm_myplugin_options', $rlm_myplugin_options );
require_once( "includes/rlm_myplugin_db_setup.php" );
}
}
register_activation_hook( __FILE__, array( 'Myplugin', 'plugin_activate' ) );
您可以阅读Francis Yaconiello关于How to write WordPress plugin的以下教程的更多内容.