Si creas un plugin para WordPress, puede que sea necesario limpiar los datos del plugin cuando los usuarios lo desinstalan. No debemos confundir la desactivación de un plugin con su eliminación. Se considera que un plugin está desinstalado cuando, estando éste desactivado, se hace clic en el botón borrar.
Si el plugin ha almacenado meta datos u opciones en las tablas de wordpress o si se han creado tablas personalizadas, es una buena práctica eliminar todos estos datos relacionados con el plugin. Hay desarrolladores que hacen ésto cuando los usuarios desactivan el plugin, pero es un error, ya que en muchos casos los usuarios pueden querer desactivarlo para realizar solamente algunas comprobaciones. La sorpresa que se pueden llevar cuando vean que todos sus datos han sido borrados no será demasiado agradable. Así que lo dicho; no uséis este código en la hook (ancla) de desactivación, sino en la de desinstalación.
Podemos usar dos métodos para borrar estos datos:
- Colocar el código dentro de la función register_uninstall_hook() de WordPress.
- Crear un archivo llamado unistall.php dentro del directorio raíz de nuestro plugin.
Configurando el archivo uninstall.php
Este archivo solamente funcionará si está en el directorio raíz de nuestro plugin. En caso de que optemos por utilizar este archivo, el plugin deberá comprobar siempre que la constante WP_UNINSTALL_PLUGIN está definida antes de proceder con la desinstalación. Esta constante es definida por WordPress cuando se desinstala o borra un plugin y no estará presente en cualquier otro caso, así que, en caso de que no exista, no ejecutaremos el código.
Vamos a ver un ejemplo en el que borramos una tabla con datos personalizados y además eliminados una opción de wordpress.
// Si no se ha seleccionado la opción de borrar el plugin desde WordPress, salimos
if ( !defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit();
}
$option_name = 'plugin_option_name';
delete_option( $nombre_opcion );
// Borrar una tabla personalizada de la base de datos
global $wpdb;
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}mytable" );
Ésto es todo; espero que os haya sido útil.