¿Cómo soltar tablas en la desinstalación usando WordPress?

5 minutos de lectura

avatar de usuario
jameslcarton

En la activación del complemento, tengo 4 tablas que se crean en la base de datos de WordPress.

En la desinstalación, me gustaría que se eliminen las tablas.

Pude escribirlo para eliminar las tablas en la desactivación. Pero por lo que he leído, es mejor mantener la información de las tablas de la base de datos hasta que el administrador la desinstale en lugar de desactivarla.

He estado buscando respuestas, pero todo lo que parece que puedo encontrar es soltarlas en la desactivación. También tengo la opción de versión que necesito desinstalar con ella.

avatar de usuario
loco

no debes hacer desinstalar.php como codificador dijo. Puede nombrar el archivo como desee o puede hacerlo en un solo archivo sin un archivo separado para la desinstalación.

register_uninstall_hook('uninstall.php', 'on_uninstall');

Significa que WP se ejecutará desinstalar.php y función on_uninstall en el desinstalar.php cuándo se eliminará el complemento. Entonces, puede cambiar el nombre del archivo si lo desea, puede cambiar el nombre de la función.

register_uninstall_hook(__FILE__, 'on_uninstall');

Significa lo mismo, pero __FILE__ indicar el archivo actual que está funcionando ahora y función on_uninstall debe estar en este archivo.

__EXPEDIENTE__ php.net

La ruta completa y el nombre de archivo del archivo con enlaces simbólicos resueltos. Si se usa dentro de un include, se devuelve el nombre del archivo incluido.

Ejemplo sencillo de funciones para activación/desactivación/desinstalación.

function on_activation()
{
    //Some stuff
}

function on_deactivation()
{
    //Some stuff
}

function on_uninstall()
{
    //Some stuff
}

register_activation_hook(__FILE__, 'on_activation');
register_deactivation_hook(__FILE__, 'on_deactivation');
register_uninstall_hook(__FILE__, 'on_uninstall');

Si agregó algunas opciones, puede eliminarlas cuando las desinstale de esta manera:

delete_option( 'some name' );

Como codificador Dicho esto, no debe eliminar tablas cuando se desactiva, es redundante y no es amigable para un usuario, que puede perder sus datos después de la desactivación.

Hay un error de sintaxis en su código:

$sql="DROP TABLE IF EXISTS $table_name;";

Debería ser así:

$sql = "DROP TABLE IF EXISTS $table_name";

Si desea poner alguna variable en la cadena, debe usar comillas dobles.

Y require_once es redundante. Mejor así:

function e34s_db_clients_uninstall()
{
    global $wpdb;
    $table_name = $wpdb->prefix . 'e34s_clients';
    $sql = "DROP TABLE IF EXISTS $table_name";
    $wpdb->query($sql);
    delete_option('e34s_time_card_version');
}

register_uninstall_hook(__FILE__, 'e34s_db_clients_uninstall');

O así:

register_uninstall_hook('uninstall.php', 'e34s_db_clients_uninstall');

Con función e34s_db_clients_uninstall en el desinstalar.php.

Hay dos formas de realizar esta operación en la desinstalación/eliminación del complemento.

la mejor manera que aprendí es usando uninstall.php

uninstall.php solo se carga cuando se elimina o elimina un complemento de los complementos; puede poner cualquier código en él para que se ejecute cuando el usuario elimina o desinstala un complemento.

<?php
/* 
 * Removing Plugin data using uninstall.php
 * the below function clears the database table on uninstall
 * only loads this file when uninstalling a plugin.
 */

/* 
 * exit uninstall if not called by WP
 */
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) {
    exit();
}

/* 
 * Making WPDB as global
 * to access database information.
 */
global $wpdb;

/* 
 * @var $table_name 
 * name of table to be dropped
 * prefixed with $wpdb->prefix from the database
 */
$table_name = $wpdb->prefix . 'table_name_to_be_dropped';

// drop the table from the database.
$wpdb->query( "DROP TABLE IF EXISTS $table_name" );

cambie “table_name_to_be_dropped” por el nombre de su tabla.

avatar de usuario
Omar Tarik

Bueno, obtuve muchos resultados cuando busqué en Google este problema. Esto es lo que obtuve: –

function mr_np_activate(){
    // hook uninstall
    if ( function_exists('register_uninstall_hook') )
        register_uninstall_hook(__FILE__,'mr_np_uninstall');        
}
register_activation_hook(__FILE__,'mr_np_activate');    

function mr_np_uninstall() {
    delete_option('my_plugins_options'); 
}

fuente: https://wordpress.stackexchange.com/questions/24600/how-can-i-delete-options-with-register-uninstall-hook

Para más información: http://codex.wordpress.org/Function_Reference/register_uninstall_hook

Usar, register_uninstall_hook. Registra el gancho de desinstalación que se llamará cuando el usuario haga clic en el enlace de desinstalación que solicita que el complemento se desinstale solo, para obtener más detalles, verifique http://codex.wordpress.org/Function_Reference/register_uninstall_hook

avatar de usuario
codificador

Suelte las tablas solo cuando el administrador desinstale/elimine el complemento.

No elimine las tablas cuando el administrador desactive el complemento, ya que los usuarios normalmente desactivan todos los complementos para solucionar los errores de wordpress después de corregirlos, reactivarán los complementos nuevamente, si elimina las tablas en ese momento, perderán todas las configuraciones de complemento configuradas por el administrador. Además, durante la actualización, wordpress desactiva automáticamente todos los complementos y se reactiva después de una actualización exitosa.

Instrucciones para eliminar tablas durante la desinstalación:

  • Sí, lo he visto y es por eso que estaba pidiendo una solución para eliminar las tablas creadas en eliminar en lugar de desactivar

    – jameslcartón

    6 de enero de 2014 a las 15:27

  • Instrucciones añadidas compruébalo

    – pero el codificador

    7 de enero de 2014 a las 10:58

use register_deactivation_hook. eso es trabajo para mi

function on_deactivation() {

    global $wpdb;
    $table_name = $wpdb->prefix . 'school';
    $sql        = "DROP TABLE IF EXISTS $table_name";
    $wpdb->query( $sql );
    delete_option( 'wp_install_uninstall_config' );
}

register_deactivation_hook( __FILE__, 'on_deactivation' );

  • Sí, lo he visto y es por eso que estaba pidiendo una solución para eliminar las tablas creadas en eliminar en lugar de desactivar

    – jameslcartón

    6 de enero de 2014 a las 15:27

  • Instrucciones añadidas compruébalo

    – pero el codificador

    7 de enero de 2014 a las 10:58

¿Ha sido útil esta solución?