2017-06-02 203 views
0

我想创建一个wordpress自定义插件,并且我在创建我的数据库中的表格时激活了我的插件,请帮助我。我搜索了很多示例,我尝试了它,但仍然没有运气。如何使用wordpress插件在数据库中创建表格

请帮帮我。

我尝试这样的代码:

function create_plugin_database_table() 
    { 
    global $table_prefix, $wpdb; 

    $tblname = 'customer'; 
    $wp_track_table = $table_prefix . "$tblname "; 

    #Check to see if the table exists already, if not, then create it 

    if($wpdb->get_var("show tables like '$wp_track_table'") != 
    $wp_track_table) 
    { 

    $sql = "CREATE TABLE `". $wp_track_table . "` ("; 
    $sql .= " `id` int(11) NOT NULL auto_increment, "; 
    $sql .= " `pincode` int(128) NOT NULL, "; 
    $sql .= " PRIMARY KEY `order_id` (`id`) "; 
    $sql .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; "; 
    require_once(ABSPATH . '/wp-admin/includes/upgrade.php'); 
    dbDelta($sql); 
    } 
    } 

    register_activation_hook(__FILE__, 'create_plugin_database_table'); 
+0

你能展示一些你的尝试吗? –

+0

我已经编辑了我的问题,请检查。 –

+0

当我尝试停用我的插件并再次激活时,它不会在我的数据库中创建表。 –

回答

0

首先,我改了一下你的创作表脚本。从$ wpdb读取前缀,并且不检查表,使用CREATE IF NOT EXIST。

function create_plugin_database_table() { 
    global $wpdb; 

    $tblname = 'customer'; 
    $wp_track_table = $wpdb->prefix . "$tblname"; 

    $sql = "CREATE TABLE IF NOT EXISTS $wp_track_table ("; 
    $sql .= " `id` int(11) NOT NULL auto_increment, "; 
    $sql .= " `pincode` int(128) NOT NULL, "; 
    $sql .= " PRIMARY KEY `order_id` (`id`) "; 
    $sql .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; "; 
    require_once(ABSPATH . '/wp-admin/includes/upgrade.php'); 
    dbDelta($sql); 

} 
register_activation_hook(__FILE__, 'create_plugin_database_table'); 

此外,我已经提出了要求。如果您需要插入一些默认值,请在创建后执行,而不是在相同的请求中。如果没有工作,请启用调试和检查日志。

+0

存在错误: 插件无法激活,因为它触发了致命错误。 致命错误:调用未定义函数dbDelta() –

+0

当我试图更改 require_once(ABSPATH。'/wp-admin/includes/upgrade.php'); 达到dbDelta(sql); 激活成功 –

+0

对不起,我还没有正确提出要求。在函数dbDelta之前执行require是正确的,因为这些函数是在这个文件上定义的。响应已更新。 –

相关问题