Löschen Sie Tabellen aus der Datenbank, wenn Sie das Plugin löschen

13

Ich habe ein Plugin erstellt und möchte eine Funktion zum Löschen meiner Tabellen aus der Datenbank hinzufügen, wenn ein Benutzer mein Plugin löscht. Ich habe eine Funktion erstellt, die Tabellen aus der Datenbank löscht, wenn ein Benutzer mein Plugin deaktiviert, aber das möchte ich nicht. Hier ist der Code:

// 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' );

Wie Sie sehen können, löscht diese Funktion Tabellen, wenn das Plugin deaktiviert ist, aber ich muss dies tun, wenn das Plugin gelöscht wird.

Zzuum
quelle
Haben Sie register_uninstall_hook ausprobiert ?
Andrew Bartel
Vielen Dank für die Antwort .. ja .. ich versuche das .. nichts ist passiert ..: /
Zzuum

Antworten:

23

Sie können dies mit der Unterstützung von WordPress uninstall.php tun:

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

Diese uninstall.php-Datei wird aufgerufen, wenn Ihr Plugin gelöscht wird.

johnh10
quelle
8

Code hier eingeben:

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");
}   

quelle
2

Sie müssen register_uninstall_hookHook verwenden, anstatt register_deactivation_hookTabellen aus der Datenbank zu löschen.

register_deactivation_hookwird ausgelöst, wenn wir ein Plugin deaktivieren, und wird register_uninstall_hookausgelöst, wenn wir remove/deleteunser Plugin verwenden möchten .

Bitte verwenden Sie diesen Code, wenn Sie nur eine Tabelle haben:

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');

Wenn Sie mehr als zwei Tabellen haben, verwenden Sie diesen Code:

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');

Referenzlinks:

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

Gufran Hasan
quelle
Danke, rette meinen Tag :)
Arman
0

Wenn Sie "WORDPRESS PLUGIN BOILERPLATE GENERATOR" verwenden, wppb

Gehe zu Includes \ class -...- deactivator.php

und schreiben Sie den folgenden Code (ändern Sie ihn bitte nach Ihren Wünschen)

global $wpdb;

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

Vielen Dank

Arman
quelle
-1

Ich weiß, dass es diesen Hook gibt register_deactivation_hook, mit dem Sie Dinge erledigen können, wenn das Plugin deaktiviert ist. Schauen Sie sich die Dokumentation an und prüfen Sie, ob es das ist, wonach Sie suchen.

Zum Beispiel:

**register_deactivation_hook**(__FILE__, 'sm_deactivation');
function myplugin_deactivation(){
/*
     Stuff
*/}
Luca Marzi
quelle
-3

Leider stellt WordPress dafür keine Funktionen zur Verfügung. Es wird nur der Hook register_uninstall_hook unterstützt. Dieser Hook wird aufgerufen, wenn der Benutzer auf den Deinstallationslink klickt, der das Plugin auffordert, sich selbst zu deinstallieren. Der Link ist nur aktiv, wenn sich das Plugin in die Aktion einhakt. Siehe http://codex.wordpress.org/Function_Reference/register_uninstall_hook

und der Haken register_deactivation_hook. Was die meisten Plugin-Entwickler tun, ist das Hinzufügen eines Kontrollkästchens zur Einstellungstabelle unter Verwendung von get_option, update_option. Wenn diese Option aktiviert ist, werden die Daten entfernt.

Auf diese Weise wird durch die vorübergehende Deaktivierung die Optionstabelle Ihres Plugins nicht zurückgesetzt.

Arevico
quelle