Hooks cycle de vie de l’extension

Disponible dans :Free

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

  1. WordPress charge le fichier principal de chaque extension active. Votre ligne add_action( 'happenboard_loaded', ... ) s’exécute à ce moment.
  2. Sur plugins_loaded, HappenBoard branche les hooks de tous ses services, puis déclenche happenboard_loaded.
  3. 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.
  4. 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

Action Free src/Plugin.php

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 test class_exists() n’est nécessaire. Pour vérifier ailleurs, dans un thème par exemple, testez did_action( 'happenboard_loaded' ).
  • Elle se déclenche avant init. Les types de contenu, taxonomies, champs méta et blocs de HappenBoard sont enregistrés sur init, et ses routes REST sur rest_api_init. Reportez ce travail dans une fonction branchée sur init.
  • 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.php d’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

Action Pro src/Plugin.php

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 pendant plugins_loaded et avant init. 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_VERSION est quand même définie : testez cette action, pas la constante, pour savoir si Pro tourne.
  • Pro ajoute ses nouvelles permissions sur init en 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 Pro src/Service/Licensing/LicenceApi.php

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

$store string
La constante HAPPENBOARD_PRO_STORE_URL si elle est définie, sinon https://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_URL dans wp-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 filtre http_request_host_is_external de 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 Pro src/Service/Licensing/LicenceApi.php

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

$args array<string,mixed>
timeout 15, redirection 2, un user agent HappenBoard-Pro/{version} et un en-tête Accept: application/json. La recherche de produit a aussi un body.
$action string
find pour la recherche de produit, sinon l’action de la boutique : activate, deactivate, status, update ou plugininformation.
$url string
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 $url telle quelle dans un journal : son paramètre api_key est la clé de licence. La requête find envoie la clé dans son corps.
  • wp_safe_remote_post() impose toujours reject_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 Pro src/Service/Updates/Updater.php

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

$hosts array<int,string>
L’hôte de la boutique (happenboard.com par défaut), ou un tableau vide quand la boutique est désactivée.
$url string
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

Action Free uninstall.php

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 dans wp-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 son uninstall.php : happenboard_loaded ne 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_ ou widget_happenboard_. Les options et transients happenboard_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->prefix pointe déjà sur ce site.

happenboard_pro_uninstall

Action Pro uninstall.php

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 ); dans wp-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 dans uploads/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 $wpdb pointé sur ce site. Elle ne touche jamais aux données de l’extension gratuite, qui relèvent de happenboard_uninstall.

Pour aller plus loin