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

21 нояб. 2014 г., 23:38:01
Просмотры: 51.2K
Голосов: 19

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

// Удаление таблицы при деактивации
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' );

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

2
Комментарии

Вы пробовали использовать register_uninstall_hook?

Andrew Bartel Andrew Bartel
22 нояб. 2014 г. 00:01:52

Спасибо за ответ.. да.. я пробовал это.. ничего не произошло.. :/

x-y-z-select x-y-z-select
22 нояб. 2014 г. 00:44:40
Все ответы на вопрос 6
2
30

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

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

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

20 дек. 2014 г. 17:29:28
Комментарии

Также читайте: https://devnote.in/delete-tables-from-the-database-when-deactivating-a-plugin/

Fefar Ravi Fefar Ravi
9 июн. 2021 г. 20:32:20

$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}my_table_name" );

Это немного лучше

Andy Andy
27 сент. 2021 г. 19:21:25
0
13

Введите код здесь:

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");
}   
5 апр. 2017 г. 14:39:05
1

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

register_deactivation_hook срабатывает при деактивации плагина, а register_uninstall_hook — при его полном удалении.

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

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/

25 мар. 2019 г. 15:32:09
Комментарии

Спасибо, выручили :)

Arman H Arman H
24 мар. 2020 г. 08:40:36
0
-1

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

Например:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Действия
*/}
19 сент. 2016 г. 10:47:31
1
-1

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

перейдите в includes\class-...-deactivator.php

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

global $wpdb;

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

Спасибо

24 мар. 2020 г. 08:43:41
Комментарии

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

S. Imp S. Imp
20 июн. 2022 г. 23:05:21
0
-4

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

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

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

22 нояб. 2014 г. 17:30:41