如何在插件安装/激活时创建数据库,并在插件删除时删除数据库



我正在尝试使用面向对象编程创建新的WordPress插件。我想在插件激活时创建数据库,在插件删除时删除数据库。下面是我的代码,它对我不起作用。我有两个文件,一个是主插件文件,另一个是插件功能包含的文件。

主文件代码如下:

<?php
/* 
Plugin Name: Test Reviews1
Plugin URI: https://test.in/
Description: This Test Plugin. 
Version: 1.0 
Author: Test 
Author URI: https://test.in/ 
License: GPLv2 or later 
    */
    new test_plugin();
    class test_plugin{
        public function __construct(){
            $this->plugin_dir = plugins_url( '' , __FILE__ );
            include('inc/inc.php');
            $this->security = new hidemysite_security();

        }
    }

包含文件代码,如下所示:

<?php
class hidemysite_security{
 public function __construct() {
  if (is_admin()) {
    register_activation_hook(__FILE__, array(&$this, 'activate'));
      register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
  }
}
public function activate() {
  global $wpdb;
  $table = $wpdb->prefix . 'md_things';
  $charset = $wpdb->get_charset_collate();
    $charset_collate = $wpdb->get_charset_collate();
    $sql = "CREATE TABLE $table (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
        name tinytext NOT NULL,
        text text NOT NULL,
        url varchar(55) DEFAULT '' NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}   
public function my_plugin_remove_database() {
     global $wpdb;
     $table_name = $wpdb->prefix . 'md_things';
     $sql = "DROP TABLE IF EXISTS $table_name";
     $wpdb->query($sql);
     //delete_option("jal_db_version");
} 
//    
}

你能帮帮我吗?

$wpdb->prefix这个变量是未定义的。这就是为什么停用插件时表不会删除的原因。

按照以下示例了解如何定义前缀变量:

定义了一个函数

function cf_core_get_table_prefix() {
    global $wpdb;
    return $wpdb->base_prefix;
}

如何使用上述功能

$table_prefix = cf_core_get_table_prefix();
$wpdb->query( "DROP TABLE {$table_prefix}md_things" );

像这样定义激活函数

global $wpdb;
    $charset_collate = cf_core_set_charset();
    $table_prefix = cf_core_get_table_prefix();
    $sql[] ="CREATE TABLE {$table_prefix}cf_contact 
    (    id int(10) unsigned NOT NULL AUTO_INCREMENT,
          name VARCHAR( 60 ) NOT NULL,
          email VARCHAR( 60 ) NOT NULL,
          mob VARCHAR( 60 ) NOT NULL,
          msg VARCHAR( 60 ) NOT NULL,
              PRIMARY KEY (`id`)
              )
             {$charset_collate} AUTO_INCREMENT=1";
        dbDelta($sql);

最新更新