Удалить таблицы из базы данных при удалении плагина

13

Я создал плагин и хочу добавить функцию для удаления моих таблиц из базы данных, когда пользователь удаляет мой плагин. Я создал функцию, которая удаляет таблицы из БД, когда пользователь отключает мой плагин, но я этого не хочу. Вот код:

// Delete table when deactivate
function my_plugin_remove_database() {
     global $wpdb;
     $table_name = "NestoNovo";
     $sql = "DROP TABLE IF EXISTS $table_name;";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}    
register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );

Как вы можете видеть, эта функция удаляет таблицы, когда плагин деактивирован, но мне нужно сделать это, когда плагин удален.

Zzuum
источник
Вы пробовали register_uninstall_hook ?
Андрей Бартель
Спасибо за ответ .. да .. я стараюсь .. ничего не случилось ..: /
Zzuum

Ответы:

23

Вы можете сделать это с помощью WordPress uninstall.php:

<?php
    if( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) exit();
    global $wpdb;
    $wpdb->query( "DROP TABLE IF EXISTS NestoNovo" );
    delete_option("my_plugin_db_version");
?>

Этот файл uninstall.php вызывается при удалении вашего плагина.

johnh10
источник
8

Введите код сюда:

register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
function my_plugin_remove_database() {
     global $wpdb;
     $table_name = $wpdb->prefix . 'NestoNovo';
     $sql = "DROP TABLE IF EXISTS $table_name";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}   

источник
2

Вам нужно использовать register_uninstall_hookхук вместо того, register_deactivation_hookчтобы удалять таблицы из базы данных.

register_deactivation_hookсрабатывает, когда мы отключаем плагин, и register_uninstall_hookсрабатывает, когда мы хотим, чтобы remove/deleteнаш плагин.

Пожалуйста, используйте этот код, если у вас есть только одна таблица:

function delete_plugin_database_table(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'table_name';
    $sql = "DROP TABLE IF EXISTS $table_name";
    $wpdb->query($sql);
}

register_uninstall_hook(__FILE__, 'delete_plugin_database_table');

Если у вас более двух таблиц, используйте этот код:

function delete_plugin_database_tables(){
        global $wpdb;
        $tableArray = [   
          $wpdb->prefix . "table_name1",
          $wpdb->prefix . "table_name2",
          $wpdb->prefix . "table_name3",
          $wpdb->prefix . "table_name4",
       ];

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

    register_uninstall_hook(__FILE__, 'delete_plugin_database_tables');

Ссылки Ссылки:

https://developer.wordpress.org/reference/functions/register_uninstall_hook/ https://developer.wordpress.org/plugins/plugin-basics/uninstall-methods/

Гуфран Хасан
источник
Спасибо, спаси мой день :)
Арман Х
0

Если вы используете "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

перейти к включает в себя \ class -...- deactivator.php

и напишите следующий код (измените, пожалуйста, как вам нужно)

global $wpdb;

    $tableArray = [
        $wpdb->prefix . "table1",
        $wpdb->prefix . "table2",
    ];
    foreach($tableArray as $table){
        $wpdb->query("DROP TABLE IF EXISTS $table");
    }

Спасибо

Арман Н
источник
-1

Я знаю, что есть этот хук, который называется: register_deactivation_hookчто вы можете использовать, когда плагин деактивирован. Взгляните на документацию и убедитесь, что это то, что вы ищете.

Например:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Stuff
*/}
Лука Марзи
источник
-3

К сожалению, WordPress не предоставляет функциональности для этого. Он поддерживает только хук register_uninstall_hook. Этот хук вызывается, когда пользователь нажимает на ссылку удаления, которая требует, чтобы плагин удалил сам себя. Ссылка не будет активной, если плагин не подключится к действию. см. http://codex.wordpress.org/Function_Reference/register_uninstall_hook

и ловушка register_deactivation_hook. Большинство разработчиков плагинов добавляют флажок в таблицу настроек с использованием get_option, update_option. Когда эта опция отмечена, данные удаляются.

Таким образом, временная деактивация не сбрасывает таблицу параметров вашего плагина.

Arevico
источник