2015-09-05 117 views
1

嗨我写了一个函数来添加一个表。我测试过我的语法,它在我的phpmyadmin中工作,但由于某种原因,它并未在我的插件中激活? :S当SQL语法正确时,Wordpress dbDelta函数不会添加表格

class clients{ 
    public static $version="1.0"; 
    protected static function setup_tables(){ 
     global$wpdb; 
     require_once(ABSPATH."/wp-admin/includes/upgrades.php"); 
     dbDelta("CREATE TABLE ".$wpdb->prefix."hippie_clients (ID mediumint(9) NOT NULL AUTO_INCREMENT, email varchar(100) NOT NULL, password varchar(512), paid tinyint(1) NOT NULL DEFAULT 0, firstname varchar(50) NOT NULL, lastname varchar(70) NOT NULL,signup TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, free tinyint(1) DEFAULT 1,gender tinyint(1) NOT NULL, lastlog varchar(200), UNIQUE(email), PRIMARY KEY(ID))$wpdb->get_charset_collate();"); 
     if(!isset($wpdb->clients))$wpdb->clients=$wpdb->prefix."hippie_clients"; 
     add_option('Hippie_clients_version',self::$version); 
    } 
    //I'm using another class to manage my activation hooks etc but this is the basic idea 
    public static function setup(){ 
     self::setup_tables(); 
    } 
    public function run(){ 
     register_activation_hook(__FILE__,(array('clients','setup')); 
    } 
} 
$clients=new clients(); 
$clients->run(); 

但是表格没有被添加。我的表语法是什么?或者我设置它的方式?它是受保护的关键字吗?

+0

检查错误https://codex.wordpress.org/Function_Reference/is_wp_error和使用错误报告http://php.net/manual/en/function.error-reporting.php –

+0

我会添加一些代码来setup_tables看看它是否被调用。 – mark

+0

我发现了一些错误:p一个是setup_tables的第3行不需要第一个斜杠。其次是唯一性和(电子邮件)之间必须有一个空格,而主键和(ID)之间必须有一个双空格。我也发现dbDelta返回它已经添加了表。但表格不存在? :S – sourRaspberri

回答

0

我收到错误的原因有几个。首先register_activation_hooks()是一个棘手的问题,我有。它没有使用我的班级结构注册(上面没有显示)。

为了解决这个问题,我通过在我的插件的主文件中注册激活进行了快速修复。

第二个是需要有一个UNIQUE和括号之间的空间和PRIMARY KEY和括号之间需要2个空格。

我还发现$wpdb->get_charset_collate()导致我的表格创建错误,所以现在只是简单地删除它。