Plugin Desinstalar y Desactivar mediante Menú de Opciones
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:
- Eliminar las tablas creadas por el plugin
- Desactivar el plugin
- 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?
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;
