Ces hooks indiquent à votre code quand HappenBoard et HappenBoard Pro sont prêts, et quand ils sont supprimés. Servez-vous-en pour démarrer une extension compagnon au bon moment et pour effacer ses données en même temps que celles de HappenBoard. Trois filtres Pro modifient aussi la façon dont Pro contacte sa boutique pour la licence et les mises à jour. Si vous débutez avec la référence, commencez par Étendre HappenBoard avec les hooks.
L’ordre de chargement à chaque requête
- WordPress charge le fichier principal de chaque extension active. Votre ligne
add_action( 'happenboard_loaded', ... )s’exécute à ce moment. - Sur
plugins_loaded, HappenBoard branche les hooks de tous ses services, puis déclenchehappenboard_loaded. - HappenBoard Pro répond à cette action en priorité 10. Si l’extension gratuite est en version 0.2.0 ou plus, Pro branche ses propres services, puis déclenche
happenboard_pro_loaded. - Sur
init, HappenBoard enregistre ses types de contenu, taxonomies et blocs. Les deux extensions ajoutent leurs nouvelles permissions en priorité 1 et mettent à jour leurs tables en priorité 2.
Dans happenboard_loaded, vous pouvez donc utiliser les classes et les filtres de HappenBoard, mais ses types de contenu n’existent pas encore.
La désinstallation demande une constante
Supprimer HappenBoard depuis l’écran Extensions conserve toutes ses données, sauf si wp-config.php contient define( 'HAPPENBOARD_UNINSTALL', true );. HappenBoard Pro a sa propre constante, HAPPENBOARD_PRO_UNINSTALL. Chaque action de désinstallation ne se déclenche que si sa constante est définie. Chaque extension ne supprime aussi que ses propres données : les options et tables de Pro, et les métadonnées qu’il garde sur les produits et commandes WooCommerce, attendent la désinstallation de Pro. Le guide RGPD, données personnelles et désinstallation l’explique aux propriétaires de sites.
Licence et mises à jour de Pro
HappenBoard Pro active sa licence et récupère ses mises à jour auprès de la boutique HappenBoard (voir Installer HappenBoard Pro). Son client de licence et son module de mise à jour démarrent seuls sur plugins_loaded, en dehors de happenboard_loaded. Ainsi, un site dont l’extension gratuite manque ou est trop ancienne reçoit quand même la mise à jour de Pro qui règle le problème. Ajoutez les trois filtres de boutique depuis le fichier principal de votre extension, pas depuis une fonction sur happenboard_pro_loaded, qui ne s’exécute pas dans ce cas.
happenboard_loaded
Se déclenche à la fin du démarrage de HappenBoard, sur plugins_loaded, une fois que chaque service de l’extension gratuite a branché ses hooks. Démarrez ici une extension compagnon : votre code ne s’exécute alors que si HappenBoard est actif.
Signature
do_action( 'happenboard_loaded' )
Exemple
// my-happenboard-addon.php, le fichier principal de votre extension.
add_action(
'happenboard_loaded',
function (): void {
// HappenBoard est actif : ses classes et ses filtres sont utilisables.
add_filter( 'happenboard_schema_event', 'my_addon_schema', 10, 2 );
// Les types de contenu et les blocs sont enregistrés plus tard, sur init.
add_action( 'init', 'my_addon_register_meta' );
}
);
Remarques
- À utiliser à la place de
plugins_loaded. Votre fonction ne s’exécute jamais quand HappenBoard est inactif : aucun testclass_exists()n’est nécessaire. Pour vérifier ailleurs, dans un thème par exemple, testezdid_action( 'happenboard_loaded' ). - Elle se déclenche avant
init. Les types de contenu, taxonomies, champs méta et blocs de HappenBoard sont enregistrés surinit, et ses routes REST surrest_api_init. Reportez ce travail dans une fonction branchée surinit. - HappenBoard Pro démarre depuis cette action, en priorité 10. Prenez une priorité plus élevée, ou
happenboard_pro_loaded, pour passer après les services de Pro. - Le
functions.phpd’un thème est chargé après le déclenchement de cette action : s’y brancher depuis un thème ne fait rien. Dans un thème, ajoutez directement vos filtres.
happenboard_pro_loaded
Se déclenche à la fin du démarrage de HappenBoard Pro, une fois que chaque service Pro a branché ses hooks. À utiliser pour les modules qui étendent les fonctions de Pro.
Signature
do_action( 'happenboard_pro_loaded' )
Exemple
add_action(
'happenboard_pro_loaded',
function (): void {
// HappenBoard et HappenBoard Pro sont tous deux actifs et démarrés.
add_filter( 'happenboard_pro_wc_pay_later_methods', 'my_addon_pay_later', 10, 2 );
// Pro ajoute ses permissions et ses tables sur init (priorités 1 et 2) :
// lisez ses tables à partir de la priorité 3.
add_action( 'init', 'my_addon_load_ticket_stats', 5 );
}
);
Remarques
- Elle s’exécute à l’intérieur de
happenboard_loaded, donc aussi pendantplugins_loadedet avantinit. Elle ne se déclenche jamais si l’extension gratuite est inactive. - Elle ne se déclenche pas quand la version installée de HappenBoard est antérieure à 0.2.0 : Pro reste alors éteint et l’explique dans une notification d’administration.
HAPPENBOARD_PRO_VERSIONest quand même définie : testez cette action, pas la constante, pour savoir si Pro tourne. - Pro ajoute ses nouvelles permissions sur
initen priorité 1 et crée ou met à jour ses tables en priorité 2. Lisez les tables de Pro à partir de la priorité 3. - Chaque filtre que Pro ajoute à son démarrage est déjà branché. Se brancher ici sur le même filtre en priorité 10 fait passer votre fonction après celle de Pro.
happenboard_pro_store_url
Filtre l’adresse de la boutique que HappenBoard Pro utilise pour sa licence et ses mises à jour. Les appels de licence et de mise à jour vont vers {store}/?wc-api=wc-am-api, et la recherche du produit d’une clé vers {store}/wp-json/license/v1/find.
Signature
apply_filters( 'happenboard_pro_store_url', string $store )
Paramètres
-
$storestring - La constante
HAPPENBOARD_PRO_STORE_URLsi elle est définie, sinonhttps://happenboard.com/.
Valeur de retour
string
L’URL de la boutique. Seule une URL https absolue est utilisée, complétée d’une barre oblique finale. Toute autre valeur, chaîne vide comprise, désactive la licence et les mises à jour.
Exemple
add_filter(
'happenboard_pro_store_url',
function ( $store ) {
// Le site de préproduction dialogue avec la boutique de préproduction.
if ( 'staging' === wp_get_environment_type() ) {
return 'https://staging-store.example.com/';
}
return $store;
}
);
Remarques
- Pour une adresse fixe, définissez plutôt
HAPPENBOARD_PRO_STORE_URLdanswp-config.php. Aucun code n’est nécessaire. - Une valeur qui n’est pas en https coupe la licence au lieu de provoquer une erreur. Chaque action de licence échoue alors : le message indique que l’adresse du serveur de licence n’est pas une URL https valide. Aucune mise à jour n’est proposée.
- La clé de licence circule dans ces requêtes, envoyées avec
wp_safe_remote_post(). Une boutique sur une adresse locale ou privée est refusée, sauf si vous l’autorisez aussi avec le filtrehttp_request_host_is_externalde WordPress. - Les paquets de mise à jour doivent venir de l’hôte de la boutique ou d’un de ses sous-domaines. Si votre boutique sert ses téléchargements depuis un autre hôte, ajoutez-le avec
happenboard_pro_update_package_hosts.
happenboard_pro_licence_request_args
Filtre les arguments de chaque requête que HappenBoard Pro envoie à sa boutique, juste avant l’appel à wp_safe_remote_post(). Il couvre les appels de licence, les recherches de mise à jour et la recherche de produit.
Signature
apply_filters( 'happenboard_pro_licence_request_args', array $args, string $action, string $url )
Paramètres
-
$argsarray<string,mixed> timeout15,redirection2, un user agentHappenBoard-Pro/{version}et un en-têteAccept: application/json. La recherche de produit a aussi unbody.-
$actionstring findpour la recherche de produit, sinon l’action de la boutique :activate,deactivate,status,updateouplugininformation.-
$urlstring - L’URL de la requête. Sauf pour
find, elle porte la clé de licence et l’identifiant d’instance du site dans sa chaîne de requête.
Valeur de retour
array<string,mixed>
Les arguments de la requête. Une valeur qui n’est pas un tableau est remplacée par un tableau vide, ce qui supprime le délai et les en-têtes.
Exemple
add_filter(
'happenboard_pro_licence_request_args',
function ( $args, $action, $url ) {
// Derrière un proxy sortant lent : laissez plus de temps à la boutique.
$args['timeout'] = 30;
return $args;
},
10,
3
);
Remarques
- Trois arguments :
add_filter( ..., 10, 3 ). - N’enregistrez jamais
$urltelle quelle dans un journal : son paramètreapi_keyest la clé de licence. La requêtefindenvoie la clé dans son corps. wp_safe_remote_post()impose toujoursreject_unsafe_urls: le désactiver ici n’a aucun effet.- Les requêtes ne partent que lorsque quelqu’un clique sur Activate, Deactivate on this site ou Check now dans HappenBoard → Settings → Licence. La vérification quotidienne et les recherches de mises à jour de WordPress en envoient aussi, une fois une clé active.
happenboard_pro_update_package_hosts
Filtre les hôtes autorisés à servir les paquets de mise à jour de HappenBoard Pro. La boutique indique l’URL du paquet. WordPress ne la reçoit que si elle est en https, sans identifiant, mot de passe ni port, et sur l’un de ces hôtes ou un sous-domaine.
Signature
apply_filters( 'happenboard_pro_update_package_hosts', array $hosts, string $url )
Paramètres
-
$hostsarray<int,string> - L’hôte de la boutique (
happenboard.compar défaut), ou un tableau vide quand la boutique est désactivée. -
$urlstring - L’URL du paquet vérifiée.
Valeur de retour
array<int,string>
Les hôtes autorisés. Chacun autorise aussi ses sous-domaines, sans tenir compte de la casse. Une valeur qui n’est pas un tableau n’autorise rien.
Exemple
add_filter(
'happenboard_pro_update_package_hosts',
function ( $hosts, $url ) {
// La boutique sert ses téléchargements depuis un CDN.
$hosts[] = 'downloads.example-cdn.com';
return $hosts;
},
10,
2
);
Remarques
- Deux arguments :
add_filter( ..., 10, 2 )pour recevoir$url. - Un paquet sur un autre hôte, ou en http simple, fait rejeter toute la réponse : aucune mise à jour n’est proposée. L’échec est gardé en cache une heure, une bonne réponse 12 heures. Après avoir ajouté un hôte, cliquez sur Vérifier à nouveau dans Tableau de bord → Mises à jour : Pro interroge alors de nouveau la boutique.
- Il ne s’exécute que si une licence est active sur le site, et jamais sur une copie des sources dont la version est encore le marqueur
{VERSION}. - WordPress télécharge et installe Pro depuis chaque hôte ajouté. N’ajoutez que des hôtes d’où votre boutique sert vraiment ses paquets.
happenboard_uninstall
Se déclenche quand WordPress supprime l’extension gratuite HappenBoard avec HAPPENBOARD_UNINSTALL définie, une fois par site, avant que HappenBoard n’efface ses propres données. Branchez-vous ici pour supprimer les options, tables, tâches planifiées et permissions de votre module dans la même passe.
Signature
do_action( 'happenboard_uninstall' )
Exemple
// Dans le fichier principal de votre extension, hors de tout hook HappenBoard.
add_action(
'happenboard_uninstall',
function (): void {
global $wpdb;
// HappenBoard n'a encore rien supprimé : ses événements sont lisibles.
delete_option( 'my_addon_settings' );
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}my_addon_log" );
wp_clear_scheduled_hook( 'my_addon_cron' );
foreach ( wp_roles()->role_objects as $role ) {
$role->remove_cap( 'my_addon_manage' );
}
}
);
Remarques
- Rien ne se passe sans accord explicite. Si
define( 'HAPPENBOARD_UNINSTALL', true );ne figure pas danswp-config.php, le désinstalleur s’arrête aussitôt, cette action ne se déclenche jamais et événements, participants et réglages restent en place. - Branchez-la depuis le fichier principal de votre extension, pas depuis une fonction sur
happenboard_loaded. HappenBoard est inactif quand WordPress exécute sonuninstall.php:happenboard_loadedne se déclenche pas dans cette requête. Votre extension doit rester active. - Après votre fonction, HappenBoard supprime ses publications, termes, transients, cinq tables, tâches planifiées, permissions et métadonnées utilisateur, ainsi que chaque option dont le nom commence par
happenboard_ouwidget_happenboard_. Les options et transientshappenboard_pro_de HappenBoard Pro restent. Donnez un autre préfixe à vos options, sinon elles partent aussi. - En multisite, elle se déclenche une fois pour chaque site du réseau, dans
switch_to_blog():$wpdb->prefixpointe déjà sur ce site.
happenboard_pro_uninstall
Se déclenche quand WordPress supprime HappenBoard Pro avec HAPPENBOARD_PRO_UNINSTALL définie, une fois par site, avant que Pro n’efface ses propres données. Les modules Pro s’y branchent pour faire leur ménage dans la même passe.
Signature
do_action( 'happenboard_pro_uninstall' )
Exemple
// Dans le fichier principal de votre module, hors de tout hook HappenBoard.
add_action(
'happenboard_pro_uninstall',
function (): void {
global $wpdb;
// Une fois par site en multisite, avec $wpdb->prefix réglé pour ce site.
delete_option( 'my_addon_ticket_report' );
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}my_addon_sales" );
foreach ( wp_roles()->role_objects as $role ) {
$role->remove_cap( 'my_addon_view_sales' );
}
}
);
Remarques
- Elle demande l’accord propre à Pro,
define( 'HAPPENBOARD_PRO_UNINSTALL', true );danswp-config.php. Sans lui, l’action ne se déclenche jamais et aucune donnée Pro n’est effacée, hormis les billets PDF laissés par d’anciennes versions dansuploads/happenboard-tickets/, toujours supprimés. - Branchez-la depuis le fichier principal de votre extension, pas depuis une fonction sur
happenboard_pro_loaded: Pro est inactif dans la requête de désinstallation, cette action ne s’y déclenche donc pas. - Après votre fonction, Pro supprime chaque option et transient dont le nom commence par
happenboard_pro_, ses transients de webhooks Stripe, treize tables, six permissions, ses tâches planifiées et ses métadonnées. Il repasse aussi ses produits WooCommerce de billets en brouillon, et supprime la licence une fois, après la boucle sur les sites. - En multisite, elle se déclenche une fois par site, avec
$wpdbpointé sur ce site. Elle ne touche jamais aux données de l’extension gratuite, qui relèvent dehappenboard_uninstall.
Pour aller plus loin
- RGPD, données personnelles et désinstallation : ce que la suppression de chaque extension efface, côté propriétaire du site.
- Installer HappenBoard Pro : la licence avec laquelle dialoguent les filtres de boutique.
- Hooks administration, rôles et permissions : choisir quels rôles reçoivent les permissions installées sur
init.