我正在尝试开发我的第一个 Wordpress 插件,但在第一阶段就停滞不前了。我试图在激活插件时设置一些选项和数据库表,但没有成功。无论我做什么,插件都会激活,但数据库未受影响,选项也不会存储在数据库中。我尝试在构造函数中回显,但它似乎永远不会到达它。我在 WP 中激活了调试,但没有报告错误。该功能未被 Hook 。有人能发现我的代码有什么问题吗?
提前感谢您的帮助。
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();
最佳答案
回到 WordPress 文档。
<?php register_activation_hook( $file, $function ); ?>
参数
$文件
(字符串)(必需)wp-content/plugins 目录中主插件文件的路径。完整路径将起作用。 默认值:无
$函数
(callback) (required) 插件激活时运行的函数。任何 PHP 的回调伪类型都可以工作。 默认值:无
可能的问题
如果从主插件文件之外的文件调用函数,那么 Hook 将不会工作,因为它没有指向正确的文件。 FILE 将指向写入代码的文件。因此,如果您碰巧从其他地方(另一个文件 - 不是主插件文件)包含这部分代码,除非您指向正确的路径,否则它不会工作。
解决方案
解决方案可能是在主插件文件中声明一个常量。
your_main_plugin_file.php
define(PLUGIN_FILE_URL, __FILE__);
然后像这样在包含的文件中使用它。
includes/some_file.php
<?php register_activation_hook( PLUGIN_FILE_URL, ['your_class_name_here', 'your_class_method_name_here']); ?>
或者如果你使用函数而不是类那么做
<?php register_activation_hook( PLUGIN_FILE_URL, 'your_function_name_here'); ?>
关于php - 插件激活 Hook 在 wordpress 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22953418/