2016-08-01 71 views
0

我爲我的插件創建了第一個表,並且在添加更多功能之後,我意識到我需要爲其他類型的數據添加第二個表。插件沒有創建第二個表激活

故障排除的努力到目前爲止還沒有使用相同的變量名稱爲SQL數據,運行dbDelta()都作爲組合的SQL VAR(的$setup_sql .= '...'代替$setup_sql = '...'),並運行代碼爲解決與dbDelta(的問題)一個簡單的功能,而不是一個班級。

我甚至試過用不同的名字運行一個表創建,只是爲了檢查代碼的工作情況,而它仍然沒有創建另一個表。

我已經有沒有錯誤貫穿所有這些測試,並且出於所有意圖和目的,似乎Wordpress不允許插件創建多個表格 - 但我知道情況並非如此。

class activation_setup { 
    public static function wpd_activate() { 
     global $wpdb; 
     $charset_collate = $wpdb->get_charset_collate(); 
     require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 

     $wpd_table_trig = $wpdb->prefix . 'wpd_triggers'; 
     $setup_sql_trig = "CREATE TABLE $wpd_table_trig (
      id int(11) NOT NULL AUTO_INCREMENT, 
      trigger varchar(255) DEFAULT NULL, 
      popup varchar(255) DEFAULT NULL, 
      notify varchar(255) DEFAULT NULL, 
      UNIQUE KEY id (id) 
     ) $charset_collate;"; 
     dbDelta($setup_sql_trig); 

     $wpd_table_sel = $wpdb->prefix . 'wpd_selections'; 
     $setup_sql_sel = "CREATE TABLE $wpd_table_sel (
      id int(11) NOT NULL AUTO_INCREMENT, 
      selected varchar(255) DEFAULT NULL, 
      session varchar(255) DEFAULT NULL, 
      ip varchar(255) DEFAULT NULL, 
      page varchar(255) DEFAULT NULL, 
      date varchar(255) DEFAULT NULL, 
      UNIQUE KEY id (id) 
     ) $charset_collate;"; 
     dbDelta($setup_sql_sel); 

     update_option('wpd_activated',true); 
    } 
} 
$activation_setup = new activation_setup(); 
register_activation_hook(__FILE__ , array($activation_setup, 'wpd_activate')); 

我會絕對堅果試圖找出爲什麼這個代碼不添加第二臺,甚至剔除重複表的代碼,並用不同的表名運行它之後。

我已經經歷了大量的博客文章和堆棧的答案試圖達到它的底部。

任何幫助將是太棒了。

回答

1

問題與表定義。 你在表中定義了trigger它也是mysql的關鍵字。
這是問題所在。
您的問題將通過此更改解決。
寫字段名稱時使用「`」。

class activation_setup { 
    public static function wpd_activate() { 
     global $wpdb; 
     $charset_collate = $wpdb->get_charset_collate(); 
     require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 

     $wpd_table_trig = $wpdb->prefix . 'wpd_triggers'; 
     $setup_sql_trig = "CREATE TABLE $wpd_table_trig (
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `trigger` varchar(255) DEFAULT NULL, 
      `popup` varchar(255) DEFAULT NULL, 
      `notify` varchar(255) DEFAULT NULL, 
      UNIQUE KEY id (id) 
     ) $charset_collate;"; 
     dbDelta($setup_sql_trig); 

     $wpd_table_sel = $wpdb->prefix . 'wpd_selections'; 
     $setup_sql_sel = "CREATE TABLE $wpd_table_sel (
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `selected` varchar(255) DEFAULT NULL, 
      `session` varchar(255) DEFAULT NULL, 
      `ip` varchar(255) DEFAULT NULL, 
      `page` varchar(255) DEFAULT NULL, 
      `date` varchar(255) DEFAULT NULL, 
      UNIQUE KEY id (id) 
     ) $charset_collate;"; 
     dbDelta($setup_sql_sel); 


    } 
} 
$activation_setup = new activation_setup(); 
register_activation_hook(__FILE__ , array($activation_setup, 'wpd_activate')); 

如果你想確保問題是從觸發字段的觸發然後刪除「`」,然後再次激活插件。

+0

**你的先生真是太棒了**我不能告訴你我已經經歷了多少次這樣的代碼 - 還有無數其他的例子 - 一個一個數字,從來沒有想過檢查這樣的實際名稱。爲我的Sql代碼中不使用蜱做好準備。 – RalphTheWonderLlama