Wordpress如何在插件激活上创建表

时间:2015-04-28 09:26:59

标签: php wordpress wordpress-plugin

这是我的代码,我将创建查询写入函数并在register_activation_hook()函数中调用它,但它无效。

function test_contact_form() {      
        global $wpdb; 
        $connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
        mysql_select_db(DB_NAME);        
        if (!$connection){ die('Error: ' . mysql_error());}

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

    $db_table_name = $wpdb->prefix . 'contactus_detail';  // table name
    if( $wpdb->get_var( "SHOW TABLES LIKE '$db_table_name'" ) != $db_table_name ) {
        if ( ! empty( $wpdb->charset ) )
            $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
        if ( ! empty( $wpdb->collate ) )
            $charset_collate .= " COLLATE $wpdb->collate"; 
        $sql = "CREATE TABLE " . $db_table_name . " (
            id int(11) NOT NULL auto_increment,
                        ip varchar(15) NOT NULL,
                        name varchar(60) NOT NULL,
                        emailid varchar(200) NOT NULL,
                        mobileno varchar(10) NOT NULL,
                        message varchar(1000) NOT NULL,
                        PRIMARY KEY (id) 
        ) $charset_collate;";


dbDelta( $sql ); // create query 
        }  
    }
    register_activation_hook(__FILE__, 'test_contact_form');

4 个答案:

答案 0 :(得分:0)

愿这对你有帮助..

function test_contact_form()
{      
  global $wpdb; 
  $db_table_name = $wpdb->prefix . 'contactus_detail';  // table name
  $charset_collate = $wpdb->get_charset_collate();

  $sql = "CREATE TABLE $db_table_name (
                id int(11) NOT NULL auto_increment,
                ip varchar(15) NOT NULL,
                name varchar(60) NOT NULL,
                emailid varchar(200) NOT NULL,
                mobileno varchar(10) NOT NULL,
                message varchar(1000) NOT NULL,
                UNIQUE KEY id (id)
        ) $charset_collate;";

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

register_activation_hook( __FILE__, 'test_contact_form' );

答案 1 :(得分:0)

当你点击仪表板中的激活链接时,将在插件激活时触发钩子“register_activation_hook”。

您的代码没问题,但在“function.php”文件中无效。创建插件时,“register_activation_hook”将起作用。

如果要从“function.php”文件创建表。你可以简单地使用'init'动作钩子。就像那样

<强> ADD_ACTION( '初始化', 'test_contact_form');

您只需将上一行替换为上一行

即可

答案 2 :(得分:0)

你写过这句话,

    UISearchBar *search=[[UISearchBar alloc]initWithFrame:CGRectMake(10, 20, 100, 20)];
    [search setBarTintColor:[UIColor clearColor]];
    search.backgroundImage=[UIImage new];
    self.navigationItem.titleView=search;

不需要。 而且,您不需要在if。

中检查 $connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); mysql_select_db(DB_NAME); if (!$connection){ die('Error: ' . mysql_error());} 个变量

请查看以下链接问题及其答案,以解决您的问题。 https://stackoverflow.com/a/29890105/2219158

答案 3 :(得分:0)

我修改了 @SelvaKumar 答案。就像在插件激活后一样,$db_table_name表将被创建到WordPress中。如果有人停用了插件,然后又激活了插件,它将尝试再次创建$db_table_name表,并会引发错误。

在此代码中,我们需要检查是否已存在表,然后此脚本不应更多。

function test_contact_form()
{      
  global $wpdb; 
  $db_table_name = $wpdb->prefix . 'contactus_detail';  // table name
  $charset_collate = $wpdb->get_charset_collate();

 //Check to see if the table exists already, if not, then create it
if($wpdb->get_var( "show tables like '$db_table_name'" ) != $db_table_name ) 
 {
       $sql = "CREATE TABLE $db_table_name (
                id int(11) NOT NULL auto_increment,
                ip varchar(15) NOT NULL,
                name varchar(60) NOT NULL,
                emailid varchar(200) NOT NULL,
                mobileno varchar(10) NOT NULL,
                message varchar(1000) NOT NULL,
                UNIQUE KEY id (id)
        ) $charset_collate;";

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

register_activation_hook( __FILE__, 'test_contact_form' );