Dezactivare și Dezinstalare Plugin prin Meniul de Opțiuni

8 nov. 2011, 22:18:34
Vizualizări: 1.01K
Voturi: 2

Îmi creez primul meu plugin (modificând unul existent pentru nevoile mele) și deși funcționează bine, încerc să creez un meniu simplu de opțiuni care să permită fie dezactivarea pluginului, fie dezactivarea și ștergerea tabelelor create de plugin.

În panoul de opțiuni am următorul formular care permite unui administrator să bifă o casetă și să trimită un formular prin care sper să realizez:

  1. Ștergerea tabelelor create de plugin
  2. Dezactivarea pluginului
  3. Redirecționare înapoi la pagina de plugin-uri

Iată codul pentru pagina mea de opțiuni:

<p class="submitmetataxonomyuninstall">
<form method="post" action=""; onsubmit="if (!this.verify.checked) return false;">
<?php _e("Șterge toate Tabelele & Datele din Baza de Date:", 'menu-test' ); ?>
    <input type="checkbox" name="verify" /></p>
<p><i>(IMPORTANT: Această acțiune NU poate fi anulată și va șterge toate tabelele și datele din baza de date.)</i></p>
<p class="submit"><input type="submit" name="submitmetataxonomyuninstall" class="button-primary" value="<?php esc_attr_e('Dezactivează & Dezinstalează') ?>" /><small> (Casetă de mai sus trebuie bifată pentru ca butonul să funcționeze.)</small></p>
</form>
</p>

Nu reușesc să fac asta să funcționeze.

Aceasta ar fi funcția pe care cred că trebuie să o apelez (când este în funcția principală a plugin-ului, dezactivează și șterge tabelele fără probleme):

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

    if (function_exists('is_multisite') && is_multisite()) {
        // verifică dacă este o activare în rețea - dacă da, rulează funcția de activare pentru fiecare blog id
        if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
            $old_blog = $wpdb->blogid;
            // Obține toate ID-urile de bloguri
            $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();      
}

Cred că aceasta apelează și această funcție din fișierul existent al plugin-ului:

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

Cum aș putea apela această funcție folosind formularul afișat?

0
Toate răspunsurile la întrebare 1
2

Trebuie doar să obții numele de bază al oricărui plugin pentru a-l dezactiva.

if( $uninstall == true ) {
    delete_option( 'SCHIMBĂACESTA' );
    deactivate_plugins( plugin_basename( __FILE__ ) );
}

În general, arată astfel: mypluginfolder/mypluginmasterfile.php

Încearcă asta.


Există mai multe modalități de a face acest lucru să funcționeze.

Dacă dorești un buton pe pagina de opțiuni pentru a apela această funcție, poți trimite un POST către pagina de opțiuni și verifica dacă butonul de dezinstalare a fost apăsat.

Ceva de genul:

$uninstall = isset( $_POST[ 'uninstall' ] ) ? true : false;
9 nov. 2011 01:11:58
Comentarii

Mulțumesc Grok - Cum pot lega funcția de dezinstalare la butonul de trimitere din meniul de opțiuni pe care l-am creat?

Rob Rob
9 nov. 2011 13:19:06

Am actualizat răspunsul pentru a reflecta o modalitate de a realiza acest lucru! Mult succes.

Sterling Hamilton Sterling Hamilton
10 nov. 2011 08:12:44