Ces hooks suivent une inscription du formulaire jusqu’à l’entrée. Ils servent à ajouter des champs au formulaire, à refuser ou limiter une inscription et à ajouter des colonnes à l’écran Attendees. D’autres réagissent quand quelqu’un s’inscrit, annule, change de date ou est supprimé.
Pour le point de vue de l’administrateur, voyez mettre en place un formulaire d’inscription et gérer les participants. Si les hooks sont nouveaux pour vous, commencez par Étendre HappenBoard avec les hooks.
Dates, places et traductions
Une inscription à un événement récurrent porte sur une seule date. La ligne du participant garde le numéro de séquence de cette date dans la série (occurrence_seq, 0 pour la première date) ; il vaut null pour un événement unique.
La capacité de l’événement s’applique à chaque date. Seuls les participants going occupent des places : waitlist, declined et cancelled n’en occupent pas.
Avec WPML ou Polylang, les traductions d’un événement partagent leurs places. Les inscriptions de toutes les traductions s’imputent sur la capacité de la traduction dans la langue par défaut, et un e-mail ne s’inscrit qu’une fois. Chaque ligne garde la traduction sur laquelle elle a été créée, qui fixe la langue des e-mails du participant.
Quel hook se déclenche quand
| Ce qui se passe | Hook |
|---|---|
| Quelqu’un s’inscrit (formulaire, commande de billets, import) | happenboard_rsvp_submitted |
| Le participant annule avec son lien, ou un remboursement annule le billet | happenboard_rsvp_cancelled |
| Un opérateur change le statut, annulation comprise | happenboard_attendee_status_changed |
| Un opérateur modifie le nom, l’e-mail ou les places | happenboard_attendee_updated |
| Un opérateur déplace le participant vers une autre date | happenboard_attendee_date_changed |
| Le participant est supprimé définitivement, seul ou avec son événement | happenboard_attendee_deleted |
| Un billet est scanné à l’entrée (Pro) | happenboard_pro_attendee_checked_in |
happenboard_rsvp_form_fields
Ajoute vos propres champs au bloc RSVP Form, après l’e-mail et avant le nombre de places. Le Ticket Picker de HappenBoard Pro affiche les mêmes champs : les acheteurs de billets y répondent aussi.
Signature
apply_filters( 'happenboard_rsvp_form_fields', string $html, int $post_id )
Paramètres
-
$htmlstring - HTML à afficher. Vide par défaut.
-
$post_idint - L’événement.
Valeur de retour
string
HTML affiché tel quel : échappez tout ce que vous construisez.
Exemple
add_filter(
'happenboard_rsvp_form_fields',
function ( string $html, int $post_id ): string {
// Le formulaire n'envoie que les champs nommés happenboard_cf_<key>.
$html .= sprintf(
'<label class="wp-block-happenboard-rsvp-form__field"><span>%s</span><input type="text" name="happenboard_cf_diet" maxlength="190"></label>',
esc_html__( 'Dietary requirements', 'my-plugin' )
);
return $html;
},
10,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. - Complétez
$html: HappenBoard Pro affiche aussi ses champs personnalisés par ce filtre. - Nommez chaque champ
happenboard_cf_<key>. Le formulaire n’envoie que ceux-là, sous la clé<key>, et ignore les champs désactivés. Une valeur n’est enregistrée que sihappenboard_rsvp_custom_fieldsla garde. - Il ne s’exécute que si le formulaire s’affiche : pas pour un événement annulé, reporté, terminé, sans date, complet ou protégé par mot de passe. HappenBoard Pro remplace le formulaire par le Ticket Picker sur un événement qui a des billets.
happenboard_rsvp_custom_fields
Vérifie les réponses supplémentaires envoyées avec une inscription et renvoie celles à enregistrer sur le participant. C’est l’autre moitié de happenboard_rsvp_form_fields : ce filtre-là affiche le champ, celui-ci garde la valeur.
Signature
apply_filters( 'happenboard_rsvp_custom_fields', array<string,mixed> $fields, array<string,string|array<int,string>> $raw, int $event_id )
Paramètres
-
$fieldsarray<string,mixed> - Réponses gardées jusqu’ici. Vide par défaut.
-
$rawarray<string,string|array<int,string>> - Ce qui a été envoyé, indexé par clé de champ (le nom du champ sans
happenboard_cf_). Les clés sont passées parsanitize_key()et les valeurs parsanitize_text_field(), ce qui n’est pas une validation. -
$event_idint - L’événement.
Valeur de retour
array<string,mixed>|WP_Error
Les réponses à enregistrer, ou un WP_Error pour refuser l’inscription avec son message. Toute autre valeur n’enregistre rien.
Exemple
add_filter(
'happenboard_rsvp_custom_fields',
function ( $fields, array $raw, int $event_id ) {
$fields = is_array( $fields ) ? $fields : array();
$diet = sanitize_text_field( (string) ( $raw['diet'] ?? '' ) );
if ( '' === $diet ) {
// Le bloc RSVP Form affiche ce message au visiteur.
return new WP_Error( 'my_diet_required', __( 'Please tell us about your dietary requirements.', 'my-plugin' ), array( 'status' => 400 ) );
}
$fields['diet'] = $diet;
return $fields;
},
20,
3
);
Remarques
- Trois arguments : enregistrez avec
10, 3, en priorité 20 ou plus si HappenBoard Pro est actif. Pro vérifie ses propres champs en priorité 10 et, si l’événement en a, ne renvoie que ceux-là. - Ajoutez à
$fieldsplutôt que de le remplacer. Le résultat est enregistré en JSON : limitez-vous à des chaînes et des tableaux de chaînes. - Il s’exécute pour toute inscription passant par le service d’inscription de HappenBoard : le formulaire, l’ability
create-rsvp, l’import CSV de Pro et ses simulations. Il vient après les contrôles de date, de doublon et de capacité. Le paiement du Ticket Picker de Pro l’applique aussi ; pas les commandes WooCommerce.
happenboard_rsvp_allowed
Décide si un événement accepte les inscriptions gratuites. Renvoyez un WP_Error pour refuser l’inscription avec votre propre code, message et statut HTTP.
Signature
apply_filters( 'happenboard_rsvp_allowed', true|WP_Error $allowed, int $event_id, array<string,mixed> $input )
Paramètres
-
$allowedtrue|WP_Error true, ou leWP_Errord’un callback précédent.-
$event_idint - L’événement, dont on sait déjà qu’il est publié et accepte encore des inscriptions.
-
$inputarray<string,mixed> - L’inscription :
event_id,email,display_name,quantity,occurrence(la date demandée),raw_fields, et depuis les outils d’administrationuser_id,status,bypass_capacity,validate_onlyoucomp(Pro).
Valeur de retour
true|WP_Error
true pour continuer, ou un WP_Error renvoyé tel quel à l’appelant. Toute autre valeur refuse avec happenboard_rsvp_not_allowed (HTTP 403).
Exemple
add_filter(
'happenboard_rsvp_allowed',
function ( $allowed, int $event_id, array $input ) {
if ( is_wp_error( $allowed ) ) {
return $allowed;
}
// Les événements réservés au personnel n'acceptent que ses adresses.
$staff = str_ends_with( strtolower( (string) ( $input['email'] ?? '' ) ), '@example.com' );
if ( has_term( 'staff-only', 'happenboard_category', $event_id ) && ! $staff ) {
return new WP_Error( 'my_staff_only', __( 'This event is open to staff only.', 'my-plugin' ), array( 'status' => 403 ) );
}
return $allowed;
},
20,
3
);
Remarques
- Trois arguments : enregistrez avec
10, 3. - Transmettez un
WP_Errorreçu sans y toucher. Le contrôle est strict :1ou'yes'refuse. - Il s’exécute pour chaque appel au service d’inscription de HappenBoard. Il vient après les contrôles de l’événement (publié, ni annulé, ni reporté, ni terminé) et avant ceux de date, de doublon, de capacité et des champs.
- HappenBoard Pro s’en sert en priorité 10 : il refuse les inscriptions simples sur tout événement qui a des billets, gratuits ou payants (
happenboard_pro_ticket_required). Seule exception, une ligne de son import CSV marquéecomp.
happenboard_rsvp_max_quantity
Filtre le nombre maximal de places qu’une inscription peut demander via la route d’inscription publique. HappenBoard le lit dans les blocs RSVP Form de la page de l’événement : une requête ne peut pas demander plus que ce que le formulaire propose.
Signature
apply_filters( 'happenboard_rsvp_max_quantity', int $limit, int $event_id )
Paramètres
-
$limitint - La plus grande limite parmi les blocs RSVP Form du contenu de l’événement et de son modèle de page. Un formulaire autorise 1 place sans Allow multi-seat RSVP, sinon son Maximum seats per RSVP (4 par défaut). 20 si aucun formulaire n’est trouvé.
-
$event_idint - L’événement.
Valeur de retour
int
La limite, ramenée entre 1 et 20 après le filtre.
Exemple
add_filter(
'happenboard_rsvp_max_quantity',
function ( int $limit, int $event_id ): int {
// Le formulaire des ateliers est dans une compo synchronisée que HappenBoard ne voit pas : il autorise 6 places.
if ( has_term( 'workshops', 'happenboard_category', $event_id ) ) {
return 6;
}
return $limit;
},
10,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. - Les formulaires placés dans une compo synchronisée ou une partie de modèle ne sont pas vus. Sur un thème classique, le formulaire que HappenBoard ajoute après le contenu compte comme un formulaire à une place.
- Il ne limite que la route publique
POST /happenboard/v1/rsvp: une demande plus grande est refusée avechappenboard_quantity_too_high(HTTP 400). Il ne change pas le nombre proposé par le formulaire, et les outils d’administration (l’abilitycreate-rsvp, l’import CSV) l’ignorent.
happenboard_rsvp_client_ip
Filtre l’adresse IP du visiteur sur laquelle se base la limite d’inscriptions (5 par adresse et par minute). HappenBoard lit REMOTE_ADDR et ignore X-Forwarded-For : derrière un proxy ou un CDN, tous les visiteurs partagent une seule adresse tant que vous ne la filtrez pas.
Signature
apply_filters( 'happenboard_rsvp_client_ip', string $ip )
Paramètres
-
$ipstring REMOTE_ADDRs’il s’agit d’une IP valide, sinon une chaîne vide.
Valeur de retour
string
L’adresse à compter. Renvoyez $ip si vous ne pouvez pas faire mieux.
Exemple
// Derrière Cloudflare : compter l'adresse réelle de chaque visiteur.
add_filter(
'happenboard_rsvp_client_ip',
fn( $ip ) => filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'] ?? '', FILTER_VALIDATE_IP ) ?: $ip
);
// Les formulaires de réservation ont leur propre filtre : ajoutez la même chose.
add_filter(
'happenboard_booking_client_ip',
fn( $ip ) => filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'] ?? '', FILTER_VALIDATE_IP ) ?: $ip
);
Remarques
- Un seul argument.
- Ne faites confiance qu’à un en-tête posé par votre propre proxy, et seulement si le site n’est pas joignable sans lui. Sinon, n’importe qui peut envoyer l’en-tête et le changer à volonté. Avec
X-Forwarded-For, prenez l’adresse ajoutée par votre proxy, pas la première, que le visiteur contrôle. - Les limites de HappenBoard Pro utilisent le même filtre. Elles portent sur les paniers de billets gratuits (même quota que les inscriptions), les paiements (voir
happenboard_pro_checkout_limits) et les propositions d’événements (3 par adresse toutes les 10 minutes). - L’adresse est aussi transmise à Turnstile et Akismet. Une chaîne vide désactive la limite par adresse ; la limite par e-mail (3 par heure), le champ piège et le temps de saisie minimal s’appliquent toujours.
happenboard_rsvp_submitted
Se déclenche juste après la création d’un participant, pour une inscription gratuite comme pour une commande de billets. C’est le point d’entrée de tout ce qui doit se passer à l’inscription.
Signature
do_action( 'happenboard_rsvp_submitted', int $attendee_id, array{event_id:int,occurrence_seq:?int,email:string,display_name:string,quantity:int,cancel_token:string} $data )
Paramètres
-
$attendee_idint - Le nouveau participant.
-
$dataarray<string,mixed> event_id,occurrence_seq(la date d’un événement récurrent, sinonnull),email,display_name,quantityetcancel_token. Les billets de Pro ajoutentpaid,source(stripe,woocommerceoufree_ticket) etsession_idouorder_id.
Exemple
add_action(
'happenboard_rsvp_submitted',
function ( int $attendee_id, array $data ): void {
// Journaliser chaque nouvelle inscription.
error_log( sprintf(
'Attendee %d registered for event %d with %d seat(s).',
$attendee_id,
(int) $data['event_id'],
(int) $data['quantity']
) );
},
10,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. - Il se déclenche depuis le service d’inscription de HappenBoard : le formulaire, l’ability
create-rsvp, l’import CSV de Pro (hors simulations). Pro le déclenche aussi depuis son webhook Stripe, les commandes WooCommerce et les paniers de billets gratuits. C’est une fois par ligne de billet : une commande peut donc le déclencher plusieurs fois. $datane contient pas le statut : lisez la ligne si besoin, car un import peut enregistrer des participants en liste d’attente ou déclinés. HappenBoard envoie son e-mail de confirmation en priorité 10, aux seuls participantsgoing.cancel_tokenest le secret du lien d’annulation du participant. Ne le journalisez pas, ne l’affichez pas et ne l’envoyez à aucun tiers.
happenboard_rsvp_cancelled
Se déclenche quand une inscription est annulée par le participant (le lien d’annulation de ses e-mails, ou DELETE /happenboard/v1/rsvp/{token}) ou par un remboursement dans HappenBoard Pro. La ligne est gardée avec le statut cancelled et ses places sont libérées.
Signature
do_action( 'happenboard_rsvp_cancelled', int $attendee_id )
Paramètres
-
$attendee_idint - Le participant dont l’inscription a été annulée.
Exemple
add_action(
'happenboard_rsvp_cancelled',
function ( int $attendee_id ): void {
// La ligne existe toujours, avec le statut cancelled.
$attendee = ( new \HappenBoard\Service\Attendees\Repository() )->find_by_id( $attendee_id );
if ( null !== $attendee ) {
error_log( 'Seat released for ' . $attendee['email'] );
}
}
);
Remarques
- Un seul argument.
- HappenBoard Pro le déclenche pour chaque ligne qu’un remboursement Stripe annule (depuis l’écran Orders ou le webhook
charge.refunded) et pour une commande WooCommerce remboursée, annulée ou échouée. Votre callback peut alors tourner dans une requête de webhook, sans utilisateur connecté. - Un remboursement Stripe partiel n’annule que les lignes remboursées en entier ou choisies par l’opérateur. Une annulation répétée ne déclenche rien.
- Une annulation par un opérateur (écran Attendees, ability
cancel-rsvp) déclenchehappenboard_attendee_status_changedà la place. HappenBoard envoie l’e-mail d’annulation dans les deux cas.
happenboard_attendee_status_changed
Se déclenche quand un opérateur change le statut d’un participant : dans l’écran Attendees (action Cancel comprise), via PATCH /happenboard/v1/attendees/{id}, ou avec les abilities update-attendee-status et cancel-rsvp.
Signature
do_action( 'happenboard_attendee_status_changed', int $attendee_id, string $new_status, string $old_status )
Paramètres
-
$attendee_idint - Le participant.
-
$new_statusstring - Le nouveau statut :
going,waitlist,cancelledoudeclined. -
$old_statusstring - Le statut précédent. Chaîne vide si la ligne n’en avait pas.
Exemple
add_action(
'happenboard_attendee_status_changed',
function ( int $attendee_id, string $new_status, string $old_status ): void {
// Quelqu'un a obtenu une place depuis la liste d'attente.
if ( 'going' === $new_status && 'waitlist' === $old_status ) {
error_log( sprintf( 'Attendee %d promoted from the waitlist.', $attendee_id ) );
}
},
10,
3
);
Remarques
- Trois arguments : enregistrez avec
10, 3. Le nouveau statut vient avant l’ancien. - Il se déclenche après une écriture réussie, et seulement si le statut change vraiment. Un passage en
goingdont les places ne tiennent pas dans la capacité est refusé avant toute écriture, sauf si l’opérateur confirme le dépassement : il ne se déclenche donc pas. - HappenBoard écrit au participant à partir de ce hook : la confirmation quand il sort de la liste d’attente, l’annulation quand il est annulé. HappenBoard Pro y rend ou reprend les places des billets, car seul
goingoccupe des places.
happenboard_attendee_updated
Se déclenche quand un opérateur modifie le nom, l’e-mail ou le nombre de places d’un participant via PATCH /happenboard/v1/attendees/{id} (l’écran Attendees). Il reçoit l’avant et l’après de chaque champ modifié.
Signature
do_action( 'happenboard_attendee_updated', int $attendee_id, array<string,array{from:mixed,to:mixed}> $changes )
Paramètres
-
$attendee_idint - Le participant.
-
$changesarray<string,array{from:mixed,to:mixed}> - Indexé par colonne (
display_name,email,quantity), chacune avecfrometto.
Exemple
add_action(
'happenboard_attendee_updated',
function ( int $attendee_id, array $changes ): void {
if ( ! isset( $changes['email'] ) ) {
return;
}
// Garder notre liste de diffusion à jour avec la nouvelle adresse.
my_plugin_sync_contact( (string) $changes['email']['from'], (string) $changes['email']['to'] );
},
10,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. - Les clés sont des noms de colonnes, pas les noms camelCase de la requête. Une requête qui ne change rien le déclenche quand même, avec un tableau vide : sortez tout de suite.
- Un changement de statut dans la même requête déclenche
happenboard_attendee_status_changedaprès celui-ci. L’ajout de places à un participantgoingest vérifié d’abord (happenboard_attendee_seats_left) ; une requête refusée ne déclenche rien.
happenboard_attendee_seats_left
Filtre le nombre de places qu’un participant peut occuper quand un opérateur augmente son nombre de places ou le passe en going : dans l’écran Attendees (Mark as Going compris) ou avec l’ability update-attendee-status. HappenBoard autorise la capacité de l’événement (celle de la date, pour un événement récurrent) moins les places des autres participants going.
Signature
apply_filters( 'happenboard_attendee_seats_left', int|null $left, array<string,mixed> $attendee )
Paramètres
-
$leftint|null - Places que le participant peut occuper, ou
nullsi l’événement n’a pas de capacité. -
$attendeearray<string,mixed> - La ligne du participant avant la modification (
attendee_id,event_id,occurrence_seq,status,quantity…).
Valeur de retour
int|null
Le nombre maximal de places, ou null pour aucune limite. Une demande plus grande est refusée avec happenboard_capacity_full (HTTP 409).
Exemple
add_filter(
'happenboard_attendee_seats_left',
function ( $left, array $attendee ) {
// Pas plus de 6 places par participant, même sans capacité définie.
return null === $left ? 6 : min( 6, (int) $left );
},
20,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. Renvoyez un entier ounull: les autres valeurs sont converties en entier, etfalsevaut 0 place et refuse la modification. - Il ne s’exécute que si un participant qui est ou devient
goingoccuperait plus de places qu’avant : plus de places, ou un passage engoingdepuis un autre statut. Pas quand l’opérateur confirme le dépassement de capacité. Moins de places passe toujours. - Sur un événement traduit, la capacité est celle de la traduction dans la langue par défaut, et les participants de toutes les traductions comptent. Le déplacement vers une autre date utilise
happenboard_attendee_date_seats_left. - HappenBoard Pro répond en priorité 10 pour les détenteurs de billets : ce qu’il reste sur leur billet à leur date, plus les places qu’ils occupent déjà. Utilisez une priorité plus tardive pour modifier sa réponse, comme dans l’exemple.
happenboard_attendee_date_changed
Se déclenche après qu’un opérateur a déplacé un participant d’un événement récurrent vers une autre date : avec Change date dans l’écran Attendees, via POST /happenboard/v1/attendees/{id}/date ou avec l’ability reschedule-rsvp. La ligne est déjà sur la nouvelle date.
Signature
do_action( 'happenboard_attendee_date_changed', int $attendee_id, int $sequence, ?int $from, array<string,mixed> $context )
Paramètres
-
$attendee_idint - Le participant déplacé.
-
$sequenceint - Séquence de la nouvelle date.
-
$from?int - Séquence de l’ancienne date,
nullsi la ligne n’en avait pas. -
$contextarray<string,mixed> event_id;from_start_utcetfrom_label(la date quittée) ;to_start_utcetto_label;quantity;status;over_capacity;notify. Les débuts sont en UTCY-m-d H:i:s, les libellés aux formats de date et d’heure du site.
Exemple
add_action(
'happenboard_attendee_date_changed',
function ( int $attendee_id, int $sequence, ?int $from, array $context ): void {
// Garder une trace de chaque déplacement.
error_log( sprintf(
'Attendee %d moved from "%s" to "%s".',
$attendee_id,
(string) $context['from_label'],
(string) $context['to_label']
) );
},
10,
4
);
Remarques
- Quatre arguments : enregistrez avec
10, 4. - Il ne se déclenche pas si le participant est déjà sur cette date ou si le déplacement est refusé. Le déplacement est refusé vers une date annulée, passée, hors série, ou sur laquelle le même e-mail est déjà inscrit. Une date sans place pour un participant
goingest refusée sauf confirmation de l’opérateur (over_capacityvaut alors true). notifyvaut true si le participant estgoinget que l’opérateur a laissé l’e-mail activé. HappenBoard envoie alors la nouvelle date avec un fichier calendrier en priorité 20 et déplace le rappel.- HappenBoard Pro déplace les places du billet vers la nouvelle date en priorité 5, avant que d’autres callbacks ne les lisent.
happenboard_attendee_date_seats_left
Filtre les places restantes pour un participant sur les dates d’un événement récurrent vers lesquelles il peut être déplacé. HappenBoard compare la capacité de l’événement aux places des participants going sur chaque date.
Signature
apply_filters( 'happenboard_attendee_date_seats_left', array<int,?int> $left, array<string,mixed> $attendee, array<int,int> $sequences )
Paramètres
-
$leftarray<int,?int> - Places restantes, indexées par séquence ;
nullquand rien ne les limite. -
$attendeearray<string,mixed> - La ligne du participant.
-
$sequencesarray<int,int> - Les dates demandées.
Valeur de retour
array<int,?int>
Places restantes par séquence, null pour aucune limite. Un retour qui n’est pas un tableau est ignoré.
Exemple
add_filter(
'happenboard_attendee_date_seats_left',
function ( $left, array $attendee, array $sequences ) {
// Garder deux places en réserve sur chaque date limitée.
foreach ( (array) $left as $sequence => $seats ) {
if ( null !== $seats ) {
$left[ $sequence ] = max( 0, $seats - 2 );
}
}
return $left;
},
20,
3
);
Remarques
- Trois arguments : enregistrez avec
10, 3. - Il s’exécute une fois pour toute la liste des dates (jusqu’à 200 dates à venir), puis pour la date choisie quand un participant
goingest déplacé. Lisez ce qu’il vous faut pour toutes les dates en une requête. - Un déplacement est refusé si les places du participant dépassent le chiffre de la date, sauf confirmation de l’opérateur. Renvoyez
nullpour une date : sa limite est levée. - HappenBoard Pro répond en priorité 10 pour les détenteurs de billets : la capacité du billet sur chaque date moins ce qui y est vendu et réservé.
happenboard_attendee_dates_assigned
Se déclenche après que des participants d’un événement récurrent sans date en ont reçu une. Chacun reçoit la date en cours au moment de son inscription : la première pas encore terminée, sinon la dernière.
Signature
do_action( 'happenboard_attendee_dates_assigned', int $event_id, array<int,int> $attendee_ids )
Paramètres
-
$event_idint - L’événement récurrent.
-
$attendee_idsarray<int,int> - Les participants qui ont reçu une date.
Exemple
add_action(
'happenboard_attendee_dates_assigned',
function ( int $event_id, array $attendee_ids ): void {
// Oublier les dates mises en cache pour ces participants.
foreach ( $attendee_ids as $attendee_id ) {
delete_transient( 'my_attendee_date_' . $attendee_id );
}
},
10,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. - Les lignes sans date sont les inscriptions antérieures à HappenBoard 0.2.0, celles d’un événement devenu récurrent depuis, et celles insérées avec une date
null. L’affectation tourne une fois à la mise à jour de la table des participants, puis à chaquehappenboard_occurrences_changed(priorité 20). - Il se déclenche une fois par événement, seulement si au moins une ligne a été placée. Une ligne plus ancienne que la première date encore stockée d’une longue série reste sans date.
- HappenBoard programme un rappel pour les participants placés dont la date est à venir. HappenBoard Pro déplace leurs ventes de billets sur les mêmes dates.
happenboard_attendee_deleted
Se déclenche après la suppression définitive d’un participant : avec Delete permanently dans l’écran Attendees (DELETE /happenboard/v1/attendees/{id}), ou avec son événement quand celui-ci est supprimé définitivement. Utile pour effacer ce que vous stockez sur ce participant.
Signature
do_action( 'happenboard_attendee_deleted', int $attendee_id )
Paramètres
-
$attendee_idint - Identifiant de la ligne supprimée.
Exemple
add_action(
'happenboard_attendee_deleted',
function ( int $attendee_id ): void {
global $wpdb;
// Supprimer les badges imprimés pour ce participant.
$wpdb->delete( $wpdb->prefix . 'my_badges', array( 'attendee_id' => $attendee_id ), array( '%d' ) );
}
);
Remarques
- Un seul argument. La ligne a déjà disparu : récupérez ce qu’il vous faut avant, par exemple sur
happenboard_event_deleting, qui voit encore les lignes. - Quand l’événement est en cours de suppression, son post et ses métadonnées sont encore lisibles. Annuler une inscription ne supprime rien et ne le déclenche pas.
- HappenBoard efface ici le rappel en attente du participant. HappenBoard Pro libère les places du billet, supprime la vente et l’historique du participant, et envoie le webhook
attendee.deleted.
happenboard_rest_attendees_prefetch
Se déclenche une fois avec toutes les lignes qu’une liste ou un export de participants va renvoyer, avant que happenboard_rest_attendee_response ne traite chaque ligne. Chargez ici vos données pour tout l’ensemble, en une requête.
Signature
do_action( 'happenboard_rest_attendees_prefetch', array<int,array<string,mixed>> $rows, WP_REST_Request $request )
Paramètres
-
$rowsarray<int,array<string,mixed>> - Lignes brutes dans l’ordre de la réponse (colonnes en snake_case,
custom_fieldsencore en JSON). La liste d’un événement inclut les participants de ses traductions. -
$requestWP_REST_Request - La liste (
GET /happenboard/v1/attendees) ou un export (GET /happenboard/v1/attendees/export).
Exemple
$my_tiers = array();
add_action(
'happenboard_rest_attendees_prefetch',
function ( array $rows ) use ( &$my_tiers ): void {
// Une requête pour toute la page, indexée par participant.
$my_tiers = my_plugin_tiers_for( array_map( 'intval', array_column( $rows, 'attendee_id' ) ) );
}
);
add_filter(
'happenboard_rest_attendee_response',
function ( array $serialized, array $row ) use ( &$my_tiers ): array {
$id = (int) $row['attendee_id'];
// Réponse à une seule ligne, non annoncée : requête de secours.
$serialized['myTier'] = $my_tiers[ $id ] ?? ( my_plugin_tiers_for( array( $id ) )[ $id ] ?? '' );
return $serialized;
},
10,
2
);
Remarques
- Deux arguments. Un callback qui n’a besoin que des lignes peut garder la valeur par défaut d’un argument.
- Une page de liste contient jusqu’à 200 lignes et un export jusqu’à 10 000 : une requête dans le filtre par ligne tournerait autant de fois.
- Les réponses à une seule ligne (
GETetPATCH /attendees/{id},POST /attendees/{id}/date) ne le déclenchent pas : le filtre a donc besoin d’une solution de secours. Ne gardez que les données de la réponse en cours.
happenboard_rest_attendee_response
Filtre un participant tel que l’API REST l’envoie à l’écran Attendees et à ses exports. Utile pour ajouter vos propres colonnes.
Signature
apply_filters( 'happenboard_rest_attendee_response', array<string,mixed> $serialized, array<string,mixed> $row )
Paramètres
-
$serializedarray<string,mixed> id,eventId,eventTitle,language,occurrenceId,occurrenceSeq,occurrenceStartUtc,occurrenceLabel,occurrenceStatus,bookedStartUtc,userId,email,displayName,status,quantity,customFields,createdUtc,updatedUtc.-
$rowarray<string,mixed> - La ligne brute de la base, pour ne pas avoir à la relire.
Valeur de retour
array<string,mixed>
Le participant avec vos clés ajoutées. Il est converti avec (array) : renvoyez toujours le tableau.
Exemple
add_filter(
'happenboard_rest_attendee_response',
function ( array $serialized, array $row ): array {
// Ajouter le niveau de l'événement à chaque participant.
$serialized['myTier'] = (string) get_post_meta( (int) $row['event_id'], '_my_tier', true );
return $serialized;
},
10,
2
);
Remarques
- Deux arguments : enregistrez avec
10, 2. - Ajoutez des clés sans reconstruire le tableau, sinon vous perdez les champs de HappenBoard et ceux des callbacks précédents (HappenBoard Pro ajoute
checkinCountetlastCheckinUtc). - Une clé ajoutée arrive dans l’export JSON. L’export CSV garde ses propres colonnes (plus une colonne
cf:par champ personnalisé) et l’export vCard ignore les clés en plus. - Il s’exécute une fois par ligne : chargez vos données sur
happenboard_rest_attendees_prefetch.
happenboard_pro_attendee_checked_in
Se déclenche après l’enregistrement d’un check-in à l’entrée : un scan sur l’écran de check-in (POST /happenboard/v1/pro/checkin/mark) ou l’ability check-in-attendee de Pro. Utile pour imprimer un badge, prévenir une équipe ou rafraîchir une liste en direct.
Signature
do_action( 'happenboard_pro_attendee_checked_in', int $checkin_id, int $attendee_id, int $event_id )
Paramètres
-
$checkin_idint - Identifiant de la ligne de check-in qui vient d’être enregistrée (pas celui du participant).
-
$attendee_idint - Le participant scanné.
-
$event_idint - L’événement de l’inscription du participant (sur un événement traduit, la traduction sur laquelle il s’est inscrit).
Exemple
add_action(
'happenboard_pro_attendee_checked_in',
function ( int $checkin_id, int $attendee_id, int $event_id ): void {
// Journaliser chaque entrée.
error_log( sprintf( 'Scan %d: attendee %d entered event %d.', $checkin_id, $attendee_id, $event_id ) );
},
10,
3
);
Remarques
- Trois arguments : enregistrez avec
10, 3. - Il se déclenche à chaque scan enregistré, nouveaux scans compris, chacun avec un nouvel identifiant de check-in. Dédoublonnez si vous ne voulez que la première entrée.
- Un billet refusé (pas de place, autre date ou autre événement) déclenche
happenboard_pro_attendee_checkin_refused, et un scan annulé déclenchehappenboard_pro_attendee_checkin_undone. Les deux sont documentés avec les hooks de check-in.
Pour aller plus loin
- Hooks notifications et e-mails : modifier les e-mails de confirmation, de rappel et d’annulation.
- Hooks synchronisation, webhooks et contrôle d’accès : check-ins refusés ou annulés, et webhooks des participants.
- Hooks billetterie et paiements : billets, paiements et remboursements dans HappenBoard Pro.