嗨,我正在尝试使用wordpress register_activation_hook()函数来创建插件激活中不存在的表。
当我把它放在插件主文件中(在这里我们定义了插件元)时,代码工作得很好,但是当我试图在子目录的其他文件中使用它时,它就不能工作了。我已经尝试将register_activation_hook(__FILE__, 'my_medias_db');更改为register_activation_hook(to_plugin_root_path, 'my_medias_db');,以插件根路径,但仍然无法工作。知道吗?
这里是代码
function my_medias_db() {
require_once( ABSPATH . '/wp-admin/includes/upgrade.php' );
global $wpdb;
$db_table_name = $wpdb->prefix . 'my_medias';
if( $wpdb->get_var( "SHOW TABLES LIKE '$db_table_name'" ) != $db_table_name ) {
if ( ! empty( $wpdb->charset ) )
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
if ( ! empty( $wpdb->collate ) )
$charset_collate .= " COLLATE $wpdb->collate";
$sql = "CREATE TABLE " . $db_table_name . " (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) NOT NULL,
`image_name` text NOT NULL,
`status` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) $charset_collate;";
dbDelta( $sql );
}
}
register_activation_hook(__FILE__, 'my_medias_db');发布于 2013-10-30 14:48:34
上面的代码是否在主插件索引文件中?
如果不是,那就是你的问题了。如果您查看wp代码,activation_hook调用依赖于插件索引文件的$file参数,因此如果您从另一个文件调用register_activation_hook,请尝试如下所示(这是一个OO示例)
...snip...
$strPluginFilename = $this->getMainPluginFilename();
// rcarver - the activation hook calls rely on the file name being the plugin index!
register_activation_hook($strPluginFilename, array($this, 'baseActivate') );
register_deactivation_hook($strPluginFilename, array($this, 'baseDeactivate') );...snip...
protected function getMainPluginFilename() {
// eg. /some/place/wp-content/plugins/my_cool_plugin/pluginbase.php will
// result in the base file name of "my_cool_plugin.php"
// NOTE: THIS ONLY WORKS IF THE CURRENT FILE IS IN THE SAME DIRECTORY
// AS THE MAIN PLUGIN FILE!
return dirname(__FILE__) . '/' . basename(dirname(__FILE__)) . '.php';
}...snip...
https://stackoverflow.com/questions/14785622
复制相似问题