Désactiver une extension n’est pas la même chose que la supprimer : l’utilisateur peut vouloir la réactiver plus tard, donc ses réglages doivent rester intacts. Ce qui doit en revanche s’arrêter immédiatement, ce sont les processus actifs qu’elle a mis en place, comme une tâche planifiée qui tournerait pour rien en arrière-plan.
Utilisation typique
La fonction register_deactivation_hook() associe le fichier principal de l’extension à une fonction exécutée au moment de la désactivation :
function arreter_mon_extension() {
$horodatage = wp_next_scheduled( 'mon_extension_cron' );
if ( $horodatage ) {
wp_unschedule_event( $horodatage, 'mon_extension_cron' );
}
}
register_deactivation_hook( __FILE__, 'arreter_mon_extension' );
Ce cas d’usage, annuler une tâche cron programmée avec wp_schedule_event(), est de loin le plus fréquent : sans cela, WP-Cron continuerait à déclencher l’événement même si le code qui le traite ne s’exécute plus normalement.
À ne pas confondre
- Ce crochet ne doit pas supprimer les options ou les tables de l’extension : cette responsabilité revient au crochet de désinstallation, déclenché seulement lors d’une suppression définitive.
- Il se déclenche aussi lorsqu’une extension est automatiquement désactivée par WordPress à cause d’une erreur fatale détectée au chargement.
- Comme pour l’activation, la fonction associée doit être définie ou chargée avant l’appel à
register_deactivation_hook(), sous peine que WordPress ne trouve rien à exécuter au moment voulu.