Un site propre ne devrait garder aucune trace d’une extension supprimée depuis longtemps : ni options orphelines dans la table wp_options, ni table SQL abandonnée. C’est la responsabilité qui incombe à cette étape finale du cycle de vie, bien plus rarement implémentée que les crochets d’activation ou de désactivation.
Deux façons de l’implémenter
La méthode recommandée consiste à créer un fichier nommé exactement uninstall.php à la racine de l’extension ; WordPress l’exécute automatiquement lors de la suppression, sans qu’il soit nécessaire d’enregistrer un crochet explicite :
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
exit;
}
delete_option( 'mon_extension_reglages' );
global $wpdb;
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}mon_extension_donnees" );
La vérification de la constante WP_UNINSTALL_PLUGIN est indispensable : elle garantit que le fichier n’est exécuté que dans le contexte réel d’une désinstallation, jamais en accès direct.
Bon à savoir
- Une alternative existe via
register_uninstall_hook(), mais la documentation officielle recommande le fichieruninstall.php, plus fiable. - Sur un multisite, il faut penser à parcourir chaque site du réseau si des données ont été enregistrées par site plutôt qu’au niveau du réseau.
- Ce fichier n’est exécuté que si l’utilisateur choisit « Supprimer » depuis l’écran des extensions après une désactivation préalable ; une simple suppression manuelle des fichiers par FTP ne le déclenche jamais.
- Certaines extensions choisissent délibérément de ne rien supprimer automatiquement et proposent plutôt un réglage explicite « Supprimer mes données à la désinstallation », laissant ce choix sensible entre les mains de l’utilisateur.