2011-05-29 88 views
1

這是我的完整的WordPress插件文件:WP自定義插件:創建表並插入一次數據。

<?php 
function wp_create_table_install() 
{ 
    global $wpdb; 

    $table_name = $wpdb->prefix.'createtable'; 
    $sql = 'CREATE TABLE '.$table_name.'(
     id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 
     name VARCHAR(75) 
    );'; 

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

function wp_create_table_insert_data() 
{ 
    global $wpdb; 

    $table_name = $wpdb->prefix.'createtable'; 
    $id = 1; 
    $name = 'WP Create Table!'; 

    $wpdb->insert($table_name, array('id' => $id, 'name' => $name)); 
} 

register_activation_hook(__FILE__, 'wp_create_table_install'); 
register_activation_hook(__FILE__, 'wp_create_table_insert_data'); 
?> 

當我激活插件,它總是試圖創建一個表並插入數據。我怎麼能這樣做,只是在第一次插件激活?

謝謝。

回答

0

在運行CREATE TABLE之前,您可以查詢information_schema.tables以檢查表是否已存在。

+0

好的,這解決了問題,以及插入查詢呢?謝謝。 – thom 2011-05-29 17:16:27

+0

很明顯,如果你不想插入表,如果表已經存在,那麼你就不會在Demian寫的檢查之後做。 – vlood 2011-06-02 08:22:55

1

更快的方法是在您的CREATE語句中添加[IF NOT EXISTS],以便在您的表已經存在時不會收到錯誤。

0

不幸的是,沒有辦法在「安裝」上運行某些東西 - 令人驚訝的是,與激活相比,WordPress不提供任何安裝鉤子!

人們應對這種情況的方式是設置和測試一個選項 - 如果該選項未設置,則創建表,如果設置了,則不執行任何操作或執行數據庫升級。選項被讀入並緩存,所以這樣做沒有性能損失。

$opt = get_option(MYPLUGIN_OPTIONS); 

$opt['dbversion'] = 100; 
... 
update_option(MYPLUGIN_OPTIONS, $opt);