Видалити таблиці з бази даних при видаленні плагіна


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

Відповіді:


24

Це можна зробити за допомогою підтримки 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 викликається, коли ваш плагін видалено.


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

Якщо ви використовуєте "WERDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

перейти до включає в себе \ class -...- disativator.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. Якщо ця опція встановлена, дані видаляються.

Таким чином, тимчасова деактивація не скидає таблицю параметрів вашого плагіна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.