在自定义插件上创建一个表就激活了吗?

时间:2016-03-17 作者:Arun Kumaresh

我正在尝试创建一个自定义插件,希望在插件激活时创建一个表。我尝试了以下代码,但它没有在数据库中创建表

function create_plugin_database_table() {
 global $wpdb;
 $table_name = $wpdb->prefix . \'sandbox\';
 $sql = "CREATE TABLE $table_name (
 id mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
 title varchar(50) NOT NULL,
 structure longtext NOT NULL,
 author longtext NOT NULL,
 PRIMARY KEY  (id)
 );";

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

register_activation_hook( __FILE__, \'create_plugin_database_table\' );

3 个回复
最合适的回答,由SO网友:dipika 整理而成

您必须包含wpadmin/升级功能。创建表示例的php文件

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

    $tblname = \'pin\';
    $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\' );

SO网友:Jismon Thomas

此代码适用于我:

function installer(){
    include(\'installer.php\');
}
register_activation_hook(__file__, \'installer\');
然后安装程序。php:

global $wpdb;
$table_name = $wpdb->prefix . "my_products";
$my_products_db_version = \'1.0.0\';
$charset_collate = $wpdb->get_charset_collate();

if ( $wpdb->get_var("SHOW TABLES LIKE \'{$table_name}\'") != $table_name ) {

    $sql = "CREATE TABLE $table_name (
            ID mediumint(9) NOT NULL AUTO_INCREMENT,
            `product-model` text NOT NULL,
            `product-name` text NOT NULL,
            `product-description` int(9) NOT NULL,
            PRIMARY KEY  (ID)
    ) $charset_collate;";

    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
    dbDelta($sql);
    add_option(\'my_db_version\', $my_products_db_version);
}

SO网友:Pankaj Kumar
function astro_plugin_table_install() {
    global $wpdb;
    global $charset_collate;
    $table_name = $wpdb->prefix . \'pin\';
     $sql = "CREATE TABLE IF NOT EXISTS $table_name (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `pincode` bignit(128) DEFAULT NOT NULL,
       PRIMARY KEY (`id`)
    )$charset_collate;";
     require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );
     dbDelta( $sql );
}
register_activation_hook(__FILE__,\'astro_plugin_table_install\');