как удалить 2 таблицы, когда плагин деактивирован - PullRequest
0 голосов
/ 24 марта 2020

Я создал плагин в WordPress, когда плагин активирован, следующие коды создают 2 таблицы в БД. как удалить эти 2 таблицы, когда плагин деактивирован? Хук register_deactivation удалил только 1-ю таблицу, 2-я таблица находится в db. Мне нужно удалить 2 таблицы, когда плагин деактивирован, как написать код

function wnm_install() {

    global $wpdb, $wnm_db_version;

    $sql = array();

    //sms table
    $sms_table = $wpdb->prefix . "smsfactory";

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

        $sql[] = "CREATE TABLE ". $sms_table . "     (
        SfID int(11) NOT NULL AUTO_INCREMENT,
        sf_name varchar(128) NOT NULL,
        start_duration date NOT NULL,
        end_duration date NOT NULL,
        activity varchar(500) NOT NULL,
        survey_settings varchar(50) NOT NULL,
        `limit` varchar(50) NOT NULL,
        goal varchar(100) DEFAULT NULL,
        PRIMARY KEY  (SfID)
        ) ";

    }

    //sms messages table
    $sms_message_table = $wpdb->prefix . "smsfactorymessagetemplate";

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

        $sql[] = "CREATE TABLE ". $sms_message_table . "   (
        sfID int(11) NOT NULL AUTO_INCREMENT,
        sftemplate_name varchar(256) NOT NULL,
        sftemplate_type varchar(128) NOT NULL,
        PRIMARY KEY  (sfID)
        ) ";

    }


    if ( !empty($sql) ) {

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

        dbDelta($sql);
        add_option("wnm_db_version", $wnm_db_version);

    }

}
register_deactivation_hook(__FILE__, 'on_deactivate' );

function on_deactivate()  {
    global $wpdb; $sql = "DROP TABLE IF EXISTS techies_datachecker"; $wpdb->query($sql);
    delete_option("my_plugin_db_version");
}

Ответы [ 3 ]

2 голосов
/ 24 марта 2020

Вам нужно добавить свои таблицы в массив. Попробуйте код ниже:

function on_deactivate() {
    global $wpdb;
    $tables = array(
        $wpdb->prefix . "smsfactory", 
        $wpdb->prefix . "smsfactorymessagetemplate"
    );
    foreach ( $tables as $table ) {
        $sql = "DROP TABLE IF EXISTS $table";
        $wpdb->query($sql);
    }

    delete_option("my_plugin_db_version");
}

register_deactivation_hook( __FILE__, 'on_deactivate'  );

Надеюсь, вам поможет.

2 голосов
/ 24 марта 2020
function delete_tbl_from_db(){
    global $wpdb;
    $tbl_array = [   
      $wpdb->prefix . "first_table",
      $wpdb->prefix . "second_table",
  ];

  foreach ($tbl_array as $tbl_name) {
     $wpdb->query("DROP TABLE IF EXISTS $tbl_name");
  }
}

register_uninstall_hook(__FILE__, 'delete_tbl_from_db');


Please check above code.
1 голос
/ 24 марта 2020
function delete_tbl_from_db(){
    global $wpdb;
    $tbl_array = [
        $wpdb->prefix . "smsfactory",
        $wpdb->prefix . "smsfactorymessagetemplate",
    ];

    foreach ($tbl_array as $tbl_name) {
     $wpdb->query("DROP TABLE IF EXISTS $tbl_name");
    }
}

register_deactivation_hook( __FILE__, 'delete_tbl_from_db' );

This is working on my site. Please check it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...