Plugin Desinstalar y Desactivar mediante Menú de Opciones

8 nov 2011, 22:18:34
Vistas: 1.01K
Votos: 2

Estoy creando mi primer plugin (modificando uno existente para lo que necesito) y aunque funciona bien, estoy intentando crear un menú de opciones simple para permitir desactivar el plugin o desactivarlo y eliminar las tablas que crea.

En el panel de opciones tengo el siguiente formulario para permitir que un administrador marque una casilla y envíe un formulario con el que espero lograr:

  1. Eliminar las tablas creadas por el plugin
  2. Desactivar el plugin
  3. Redirigir de vuelta a la página de plugins

Aquí está el código de mi página de opciones:

<p class="submitmetataxonomyuninstall">
<form method="post" action=""; onsubmit="if (!this.verify.checked) return false;">
<?php _e("También Eliminar todas las Tablas & Datos de la Base de Datos:", 'menu-test' ); ?>
    <input type="checkbox" name="verify" /></p>
<p><i>(IMPORTANTE: Esta acción NO puede revertirse y eliminará todas las tablas y datos de la base de datos.)</i></p>
<p class="submit"><input type="submit" name="submitmetataxonomyuninstall" class="button-primary" value="<?php esc_attr_e('Desactivar & Desinstalar') ?>" /><small> (Debe marcar la casilla superior para que el botón funcione.)</small></p>
</form>
</p>

Pero no logro que esto funcione.

Esta sería la función que creo que necesito llamar (cuando está en la función principal del plugin, desactiva y elimina las tablas sin problemas):

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

    if (function_exists('is_multisite') && is_multisite()) {
        // comprobar si es una activación de red - si es así, ejecutar la función de activación para cada blog id
        if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1)) {
            $old_blog = $wpdb->blogid;
            // Obtener todos los ids de blog
            $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();      
}

Creo que esto también llama a esta función desde el archivo principal del plugin:

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

¿Cómo puedo llamar a esta función usando el formulario mostrado?

0
Todas las respuestas a la pregunta 1
2

Solo necesitas obtener el nombre base de cualquier plugin para desactivarlo.

if( $uninstall == true ) {
    // Eliminar la opción 'CHANGETHIS' de la base de datos
    delete_option( 'CHANGETHIS' );
    // Desactivar el plugin actual usando su ruta base
    deactivate_plugins( plugin_basename( __FILE__ ) );
}

Generalmente tienen este formato: micarpetadeplugin/archivoprincipaldelplugin.php

Prueba con eso.


Existen diversas formas de hacer que funcione.

Si deseas un botón en la página de opciones para llamar a esa función, podrías simplemente hacer un POST a la página de opciones y verificar si se hizo clic en el botón de desinstalación.

Algo como:

// Verificar si se envió el formulario con el campo 'uninstall'
$uninstall = isset( $_POST[ 'uninstall' ] ) ? true : false;
9 nov 2011 01:11:58
Comentarios

Gracias Grok - ¿Cómo puedo vincular la función de desinstalación al botón de enviar en el menú de opciones que he creado?

Rob Rob
9 nov 2011 13:19:06

¡He actualizado la respuesta para reflejar una forma de lograr eso! Mucha suerte.

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