【问题标题】:How to create a table in database using WordPress plugin如何使用 WordPress 插件在数据库中创建表
【发布时间】:2017-06-02 00:10:47
【问题描述】:

我正在尝试创建一个 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' );

【问题讨论】:

  • 你能展示一些你的尝试吗?
  • 我已经编辑了我的问题,请检查。
  • 当我尝试停用我的插件并再次激活时,它不会在我的数据库中创建表。

标签: wordpress plugins


【解决方案1】:

首先,我对您的创建表脚本进行了一些更改。从 $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' );

另外,我已经提出了要求。如果您需要插入一些默认值,请在创建之后进行,而不是在同一个请求中。如果还是不行,请开启调试并查看日志。

【讨论】:

  • 出现错误:无法激活插件,因为它触发了致命错误。致命错误:调用未定义函数 dbDelta()
  • 当我试图改变 require_once(ABSPATH . '/wp-admin/includes/upgrade.php' );直到 dbDelta(sql);激活成功
  • 对不起,我没有正确阅读要求。在函数 dbDelta 之前做 require 是正确的,因为这些函数是在这个文件中定义的。响应已更新。
  • HI Sakura 你能帮我做我的插件吗?
  • 如果您有其他关于如何做事的问题,并且您一直在尝试,如果我知道如何帮助您,我可以给出任何答案。如果你在 SO 上做更多的问题,没关系
【解决方案2】:

由于版本兼容性,可能会发生冲突。您可以使用下面的sn -p 来查看使用了什么版本的系统以避免冲突。

function my_plugin_create_db() {

global $wpdb;
$version = get_option( 'my_plugin_version', '1.0' );
$charset_collate = $wpdb->get_charset_collate();
$table_name = $wpdb->prefix . 'my_analysis';

$sql = "CREATE TABLE $table_name (
    id mediumint(9) NOT NULL AUTO_INCREMENT,
    time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    views smallint(5) NOT NULL,
    clicks smallint(5) NOT NULL,
    UNIQUE KEY id (id)
) $charset_collate;";

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

if ( version_compare( $version, '2.0' ) < 0 ) {
    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
      views smallint(5) NOT NULL,
      clicks smallint(5) NOT NULL,
      blog_id smallint(5) NOT NULL,
      UNIQUE KEY id (id)
    ) $charset_collate;";
    dbDelta( $sql );

    update_option( 'my_plugin_version', '2.0' );        
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2019-08-19
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多