Certaines opérations n’ont de sens qu’au tout premier lancement d’une extension : créer une option par défaut, ajouter une table dédiée, réserver une page. Les exécuter à chaque chargement serait un gaspillage inutile ; ce crochet permet de les isoler dans un moment précis du cycle de vie de l’extension.
Comment l’enregistrer
La fonction register_activation_hook() associe le fichier principal de l’extension à une fonction de rappel, appelée juste après le clic sur « Activer » dans la liste des extensions :
function initialiser_mon_extension() {
add_option( 'mon_extension_version', '1.0.0' );
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'initialiser_mon_extension' );
Vider les règles de réécriture avec flush_rewrite_rules() est un usage courant lorsqu’une extension enregistre un nouveau type de contenu ou une nouvelle structure d’URL.
Pièges fréquents
- Le code exécuté par ce crochet doit être placé dans le fichier principal de l’extension ou y être chargé avant l’appel à
register_activation_hook(), sinon la fonction n’est pas trouvée. - Ce crochet ne se déclenche pas lors d’une simple mise à jour de fichiers : il faut le distinguer d’une logique de migration de données, qui doit être gérée séparément en comparant un numéro de version stocké en option.
- Créer des tables personnalisées ici nécessite d’utiliser
dbDelta()plutôt qu’une requête SQL directe, pour rester compatible avec les mises à jour ultérieures de la structure. - Sur un multisite, une extension activée « pour le réseau » reçoit un second paramètre booléen dans sa fonction d’activation, indiquant si l’opération doit se répéter sur chaque site existant.