REGISTER_ACTIVATION_HOOK()不激活插件

时间:2013-02-21 作者:Salvatore Dibenedetto

我正在写一个插件,在激活时必须在数据库中创建一个新表。

为此,我使用:

register_activation_hook( __FILE__, \'createTable\' );
当我运行激活时,我的插件在数据库中创建新表,但当插件页面重新加载时,我的插件被列为非活动。所以我仍然有链接:

激活|删除。

为什么会这样?如何修复?

以下是我的功能:

    function createTable(){


    $link = mysql_connect(\'localhost\', \'user\', \'pass\');
    if (!$link) {
        die( \'Could not connect: \' . mysql_error() );
    }
    mysql_select_db (db_name); 

    $sql = "CREATE TABLE IF NOT EXISTS UsersExtra (
      user_id INT NOT NULL,
      first_name VARCHAR(25) NOT NULL,
      last_name VARCHAR(25) NOT NULL,
      address VARCHAR(80) NOT NULL,
      city VARCHAR(30) NOT NULL,
      province CHAR(2) NOT NULL,
      postcode CHAR(7) NOT NULL,
      interests TEXT NULL,
      bio TEXT NULL,
      signature TEXT NULL,
      skills TEXT NULL,
      PRIMARY KEY (user_id),
      FULLTEXT KEY (interests, skills)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8";

    mysql_query($sql) or die( mysql_error() );
    mysql_close($link);

}

1 个回复
SO网友:Max Yudin

当此代码位于主插件文件中时,效果非常好:

<?php
function createTable(){
    global $wpdb;
    $query = "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix ."UsersExtra (
        user_id INT NOT NULL,
        first_name VARCHAR(25) NOT NULL,
        last_name VARCHAR(25) NOT NULL,
        address VARCHAR(80) NOT NULL,
        city VARCHAR(30) NOT NULL,
        province CHAR(2) NOT NULL,
        postcode CHAR(7) NOT NULL,
        interests TEXT NULL,
        bio TEXT NULL,
        signature TEXT NULL,
        skills TEXT NULL,
        PRIMARY KEY (user_id),
        FULLTEXT KEY (interests, skills)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8";
    $wpdb->query($query);
}
register_activation_hook(__FILE__, \'createTable\');

结束

相关推荐