web-dev-qa-db-fra.com

Désinstallation et désactivation du plug-in via le menu Options

Je crée mon premier plugin (en modifiant un existant pour ce dont j'ai besoin) et bien que cela fonctionne correctement, j'essaie de créer un menu d'options simple permettant la désactivation du plugin ou la désactivation et la suppression des tables créées par le plugin.

Dans le panneau des options, j'ai le formulaire suivant pour permettre à un administrateur de cliquer sur une case à cocher, puis de soumettre un formulaire auquel j'espère accéder:

  1. Supprimer les tables créées par le plugin
  2. Désactiver le plugin
  3. Redirection vers la page du plugin

Voici le code de ma page d'options:

<p class="submitmetataxonomyuninstall">
<form method="post" action=""; onsubmit="if (!this.verify.checked) return false;">
<?php _e("Also Delete all Tables & Data from Database:", 'menu-test' ); ?>
    <input type="checkbox" name="verify" /></p>
<p><i>(IMPORTANT: This action CANNOT be reversed and will remove all tables and data from the database.)</i></p>
<p class="submit"><input type="submit" name="submitmetataxonomyuninstall" class="button-primary" value="<?php esc_attr_e('Deactivate & Uninstall') ?>" /><small> (Checkbox above must be checked for button to work.)</small></p>
</form>
</p>

Je ne peux tout simplement pas que cela fonctionne, cependant.

C’est la fonction que je pense avoir besoin d’appeler (quand elle est dans la fonction principale du plugin, elle est désactivée et supprime parfaitement les tables):

register_deactivation_hook( __FILE__, 'simple_term_meta_uninstall' );
function simple_term_meta_uninstall() {
    global $wpdb;

    if (function_exists('is_multisite') && is_multisite()) {
        // check if it is a network activation - if so, run the activation function for each blog id
        if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
            $old_blog = $wpdb->blogid;
            // Get all blog ids
            $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
            foreach ($blogids as $blog_id) {
                switch_to_blog($blog_id);
                _simple_term_meta_uninstall();
            }
            switch_to_blog($old_blog);
            return;
        }   
    } 
    _simple_term_meta_uninstall();      
}

Je crois que cela appelle également cette fonction à partir du fichier de plug-in existant:

register_uninstall_hook( __FILE__, 'simple_term_meta_uninstall' );

function _simple_term_meta_uninstall()
{
    global $wpdb;

    $table_name = $wpdb->prefix . 'termmeta';

    $wpdb->query("DROP TABLE IF EXISTS $table_name");

    delete_option( "simple_term_meta_db_version" );
}

Comment pourrais-je appeler cette fonction en utilisant le formulaire indiqué?

2
Rob

Vous devez juste obtenir le nom de base de n'importe quel plugin pour le désactiver.

if( $uninstall == true ) {
    delete_option( 'CHANGETHIS' );
    deactivate_plugins( plugin_basename( __FILE__ ) );
}

Ils ressemblent généralement à mypluginfolder/mypluginmasterfile.php

Donnez un coup de feu.


Il y a plusieurs façons de le faire fonctionner.

Si vous souhaitez qu'un bouton de la page des options appelle cela, vous pouvez simplement POST accéder à la page des options et vérifier si le bouton de désinstallation a été cliqué.

Quelque chose comme:

$uninstall = isset( $_POST[ 'uninstall' ] ) ? true : false;
1