Supprimer les tables de la base de données lors de la suppression du plugin

13

J'ai créé un plugin et je veux ajouter une fonction pour supprimer mes tables de la base de données lorsqu'un utilisateur supprime mon plugin. J'ai créé une fonction qui supprime les tables de la base de données lorsqu'un utilisateur désactive mon plugin, mais je ne le veux pas. Voici le 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' );

Comme vous pouvez le voir, cette fonction supprime les tables lorsque le plugin est désactivé, mais je dois le faire lorsque le plugin est supprimé.

Zzuum
la source
Avez-vous essayé register_uninstall_hook ?
Andrew Bartel
Merci pour la réponse .. oui .. j'essaye .. rien ne s'est passé ..: /
Zzuum

Réponses:

23

Vous pouvez le faire en utilisant le support 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");
?>

Ce fichier uninstall.php est appelé lorsque votre plugin est supprimé.

johnh10
la source
8

Entrez le code ici:

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

la source
2

Vous devez utiliser le register_uninstall_hookhook au lieu de register_deactivation_hooksupprimer les tables de la base de données.

register_deactivation_hookse déclenche lorsque nous désactivons un plugin et se register_uninstall_hookdéclenche lorsque nous voulons remove/deletenotre plugin.

Veuillez utiliser ce code si vous n'avez qu'une seule table:

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

Si vous avez plus de deux tables, vous utilisez ce 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');

Liens de référence:

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

Gufran Hasan
la source
Merci de sauver ma journée :)
Arman H
0

Si vous utilisez "WORDPRESS PLUGIN BOILERPLATE GENERATOR" wppb

allez dans includes \ class -...- deactivator.php

et écrivez le code suivant (modifiez svp selon vos besoins)

global $wpdb;

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

Merci

Arman H
la source
-1

Je sais qu'il y a ce crochet appelé: register_deactivation_hookque vous pouvez utiliser pour faire des choses lorsque le plugin est désactivé. Jetez un œil à la documentation et voyez si c'est ce que vous recherchez.

Par exemple:

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

Malheureusement, WordPress n'expose pas de fonctionnalité pour le faire. Il prend uniquement en charge le crochet register_uninstall_hook. Ce hook est appelé lorsque l'utilisateur clique sur le lien de désinstallation qui appelle le plugin à se désinstaller. Le lien ne sera actif que si le plugin se connecte à l'action. voir http://codex.wordpress.org/Function_Reference/register_uninstall_hook

et le crochet register_deactivation_hook. Ce que la plupart des développeurs de plugins font est d'ajouter une case à cocher à la table de configuration en utilisant get_option, update_option. Lorsque cette option est cochée, les données sont supprimées.

De cette façon, la désactivation temporaire ne réinitialise pas la table des options de votre plugin.

Arevico
la source