0

有人可以帮我弄清楚为什么当我激活我的插件时 wordpress 没有创建“wp_locations”表。

global $wp_locations_version;
$wp_locations_version = "1.1";

define( 'LOCATIONURL', plugins_url().'/wp_locations' );

function locations_install() {
    global $wpdb;
    global $wp_locations_version;


    $sql = "CREATE TABLE IF NOT EXISTS wp_locations (
    ID BIGINT NOT NULL AUTO_INCREMENT,
    location VARCHAR(100) NOT NULL,
    address VARCHAR(255) NOT NULL,
    lattitude INT,
    longitude INT,
    description MEDIUMTEXT NULL,
    person VARCHAR(50) NOT NULL,
    personimg VARCHAR(255) NOT NULL,
    email VARCHAR(255) NULL,
    phone INT,
    sort INT
    );";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);

    add_option("wp_locations_version", $wp_locations_version);
}
register_activation_hook( __FILE__ , 'locations_install' );
4

2 回答 2

1

您需要在 SQL 中至少包含一个 KEY 字段。

来自http://codex.wordpress.org/Creating_Tables_with_Plugins#Creating_or_Updating_the_Table

  • 您必须在 SQL 语句中将每个字段放在自己的行中。

  • PRIMARY KEY 和主键定义之间必须有两个空格。

  • 您必须使用关键字 KEY 而不是其同义词 INDEX,并且您必须至少包含一个 KEY。

  • 不得在字段名称周围使用任何撇号或反引号。

于 2012-11-12T08:55:49.160 回答
0

您的代码中没有与数据库的连接。添加一个像这样的函数:

        function MySQLConnect( ) {
          $MySQLink = mysql_connect( DB_HOST, DB_USER, DB_PASSWORD ) ;// These parameters are defined in 'wp-config.php'
          if ( !$MySQLink ) :
            return FALSE ;
          else :
            return $MySQLink ;
          endif ;
        }

然后,在函数locations_install()中,在开头添加以下行以建立连接:

        $Link = MySQLConnect( ) ;
        if ( !$Link ) return FALSE ;
        ...                        

希望这可以帮助。

更新

立场纠正苏达尔。

在 Wordpress 中执行此操作的方法应该是使用 wpdb 类,它不需要新的连接。在这种情况下,存在以下问题:

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');   

从 wp-admin 调用插件脚本。它应该是:

require_once('/includes/upgrade.php');

抱歉误导。

于 2012-11-12T04:07:36.663 回答