首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordPress: register_activation_hook()

WordPress: register_activation_hook()
EN

Stack Overflow用户
提问于 2013-02-09 06:35:04
回答 1查看 2K关注 0票数 0

嗨,我正在尝试使用wordpress register_activation_hook()函数来创建插件激活中不存在的表。

当我把它放在插件主文件中(在这里我们定义了插件元)时,代码工作得很好,但是当我试图在子目录的其他文件中使用它时,它就不能工作了。我已经尝试将register_activation_hook(__FILE__, 'my_medias_db');更改为register_activation_hook(to_plugin_root_path, 'my_medias_db');,以插件根路径,但仍然无法工作。知道吗?

这里是代码

代码语言:javascript
复制
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');
EN

回答 1

Stack Overflow用户

发布于 2013-10-30 14:48:34

上面的代码是否在主插件索引文件中?

如果不是,那就是你的问题了。如果您查看wp代码,activation_hook调用依赖于插件索引文件的$file参数,因此如果您从另一个文件调用register_activation_hook,请尝试如下所示(这是一个OO示例)

...snip...

代码语言:javascript
复制
    $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...

代码语言:javascript
复制
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...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14785622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档