Hooks événements, récurrence et séries

Disponible dans :Free

Ces hooks agissent sur les événements et leurs dates. Ils servent à suivre la reconstruction des dates d’un événement récurrent, à faire le ménage après une suppression définitive ou à regrouper des traductions. D’autres modifient le balisage Event, les adresses des événements et ce que HappenBoard Pro envoie à Google Calendar et Outlook.

Côté édition, voyez les événements récurrents et les sites multilingues. Si les hooks sont nouveaux pour vous, commencez par Étendre HappenBoard avec les hooks.

Comment les dates d’un événement sont stockées

Chaque événement est un post. Ses dates sont dans une table propre à HappenBoard : une ligne pour un événement unique, une ligne par date pour un événement récurrent. Chaque ligne a un numéro de séquence (0 pour la première date). Les lignes sont reconstruites à partir des réglages de l’événement : ne les modifiez jamais directement.

À chaque enregistrement :

  1. happenboard_occurrences_syncing se déclenche alors que les anciennes lignes sont encore là.
  2. Les anciennes lignes sont supprimées, puis les nouvelles écrites. happenboard_occurrences_changed se déclenche après chaque étape.

Quand un événement est supprimé définitivement (la corbeille retire seulement ses lignes) :

  1. Ses lignes sont supprimées et happenboard_occurrences_changed se déclenche.
  2. happenboard_event_deleting se déclenche. Le post, ses métadonnées et ses participants sont encore lisibles.
  3. Chaque participant est supprimé et déclenche happenboard_attendee_deleted.

Événements traduits

Avec WPML ou Polylang, chaque traduction d’un événement est un post à part, avec ses propres dates et ses propres participants. happenboard_public_occurrence_clauses limite les listes publiques à la langue courante. Les traductions partagent leurs places : les inscriptions de toutes les traductions s’imputent sur la capacité de la traduction dans la langue par défaut. happenboard_translation_group décide quels posts forment ce groupe.

happenboard_occurrences_syncing

Action Free src/Service/Events/OccurrenceSyncer.php

Se déclenche au début de chaque reconstruction des dates d’un événement, quand ses lignes contiennent encore les anciennes dates. Utile pour noter ce qu’une modification va changer, puis comparer à la fin de la requête.

Signature

do_action( 'happenboard_occurrences_syncing', int $event_id, bool $announce )

Paramètres

$event_id int
L’événement dont les dates vont être reconstruites.
$announce bool
true quand la reconstruction vient d’une modification (un enregistrement, une date annulée ou déplacée). false quand elle recalcule seulement les lignes : après une mise à jour de l’extension ou un changement de fuseau horaire du site.

Exemple

add_action(
    'happenboard_occurrences_syncing',
    function ( int $event_id, bool $announce ): void {
        global $wpdb;
        if ( ! $announce ) {
            return;
        }
        // Les lignes contiennent encore les dates d'avant la modification.
        $GLOBALS['my_old_dates'][ $event_id ] = $wpdb->get_col(
            $wpdb->prepare(
                "SELECT start_utc FROM {$wpdb->prefix}happenboard_occurrences WHERE event_id = %d AND is_cancelled = 0",
                $event_id
            )
        );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2 pour recevoir $announce.
  • Une même requête peut reconstruire les dates d’un événement plusieurs fois : comparez à la fin de la requête (sur shutdown). HappenBoard fait de même en priorité 10 : il note la date de chaque participant, puis écrit à ceux dont la date a été annulée ou déplacée.
  • Il ne se déclenche pas quand un événement est mis à la corbeille ou supprimé définitivement : ces opérations retirent seulement les lignes, ce qui déclenche happenboard_occurrences_changed.

happenboard_occurrences_changed

Action Free src/Service/Occurrences/Repository.php

Se déclenche après l’écriture ou la suppression des lignes de dates d’un événement : enregistrement, corbeille, suppression définitive, import, WP-CLI ou prolongation quotidienne d’une longue série. Utile pour vider ce que vous mettez en cache à partir des dates.

Signature

do_action( 'happenboard_occurrences_changed', int $event_id )

Paramètres

$event_id int
L’événement dont les lignes ont changé.

Exemple

add_action(
    'happenboard_occurrences_changed',
    function ( int $event_id ): void {
        // Notre liste en cache des prochaines dates est périmée.
        delete_transient( 'my_plugin_next_dates_' . $event_id );
    }
);

Remarques

  • Un seul argument.
  • Un enregistrement le déclenche deux fois : à la suppression des anciennes lignes, puis à l’écriture des nouvelles. Lors du premier appel l’événement n’a aucune ligne : ne considérez pas ce que vous lisez alors comme définitif.
  • La mise à la corbeille retire les lignes jusqu’à la restauration. La suppression définitive les retire avant le déclenchement de happenboard_event_deleting.
  • HappenBoard vide son flux iCal en cache en priorité 10 et, en priorité 20, donne une date aux participants d’un événement récurrent qui n’en ont pas (happenboard_attendee_dates_assigned). Gardez un callback léger : un import ou une modification groupée le déclenche pour chaque événement.

happenboard_public_occurrence_clauses

Filtre Free src/Service/Occurrences/Repository.php

Ajoute du SQL à chaque lecture publique des dates : blocs Calendar, Upcoming Events, Events List, Events Grid et Event Query Loop, et flux iCal du site. Utile pour exclure des événements des listes publiques, comme HappenBoard le fait avec WPML et Polylang pour n’afficher qu’une langue.

Signature

apply_filters( 'happenboard_public_occurrence_clauses', array{join:string,where:string} $clauses, string $event_column, string $fallback )

Paramètres

$clauses array{join:string,where:string}
Fragments SQL, vides par défaut. join est ajouté après la jointure sur la table des posts (alias p ; la table des dates est o), where est combiné au reste par AND. Les deux doivent être entièrement préparés.
$event_column string
Colonne qui contient l’identifiant de l’événement. Toujours 'o.event_id' aujourd’hui.
$fallback string
Ce qu’il faut afficher quand aucune langue n’est active : '' pour toutes les langues, 'default' pour la seule langue par défaut (le flux iCal du site).

Valeur de retour

array{join:string,where:string} Les fragments à appliquer. Un retour qui n’est pas un tableau, ou un fragment qui n’est pas une chaîne, n’ajoute rien.

Exemple

add_filter(
    'happenboard_public_occurrence_clauses',
    function ( $clauses, $event_column ) {
        global $wpdb;
        // Exclure les événements réservés aux membres de toutes les listes publiques.
        $condition = $wpdb->prepare(
            "NOT EXISTS ( SELECT 1 FROM {$wpdb->postmeta} pm WHERE pm.post_id = {$event_column} AND pm.meta_key = %s )",
            '_my_members_only'
        );
        $clauses['where'] = '' === $clauses['where']
            ? $condition
            : '( ' . $clauses['where'] . ' ) AND ' . $condition;
        return $clauses;
    },
    20,
    2
);

Remarques

  • Deux ou trois arguments : enregistrez avec 10, 2 pour la colonne, 10, 3 pour le repli de langue.
  • Complétez les fragments reçus. Avec WPML ou Polylang, HappenBoard ajoute une jointure de langue en priorité 10 : renvoyer des chaînes neuves la supprime, et chaque traduction réapparaît.
  • Préparez chaque valeur avec $wpdb->prepare(). HappenBoard double lui-même chaque % littéral pour un second passage dans prepare() : ne les doublez pas.
  • Seules les lectures limitées aux événements publiés l’exécutent. Le calendrier d’administration, la date affichée sur une page d’événement et les abilities IA l’ignorent. Le cache du flux iCal est indexé sur le résultat : renvoyez le même SQL pour un même contexte de requête.

happenboard_translation_group

Filtre Free src/Integration/Multilingual/TranslationGroup.php

Filtre les traductions d’un événement : les posts dont les inscriptions partagent ses places et sa liste de participants. HappenBoard le remplit à partir de WPML ou Polylang ; utilisez-le pour une autre extension multilingue qui garde chaque traduction dans son propre post.

Signature

apply_filters( 'happenboard_translation_group', array{ids:array<int,int>,original:int,languages:array<int,string>} $group, int $event_id )

Paramètres

$group array{ids:array<int,int>,original:int,languages:array<int,string>}
ids : toutes les traductions, l’événement compris, par identifiant croissant. original : la traduction qui porte la capacité partagée (celle de la langue par défaut, sinon la source, sinon le plus petit identifiant). languages : le code de langue de chaque traduction (fr), indexé par identifiant, affiché dans la liste et l’export des participants. Sans traduction : l’événement seul, original de lui-même.
$event_id int
L’événement demandé.

Valeur de retour

array{ids:array<int,int>,original:int,languages:array<int,string>} Le groupe. HappenBoard ajoute toujours l’événement à ids, prend le plus petit identifiant si original n’en fait pas partie et ignore les langues des non-membres. Un retour qui n’est pas un tableau laisse l’événement seul.

Exemple

add_filter(
    'happenboard_translation_group',
    function ( $group, $event_id ) {
        // Notre extension relie chaque copie à son original par une métadonnée.
        $original = (int) get_post_meta( $event_id, '_my_translation_of', true ) ?: $event_id;
        $copies   = array_map( 'intval', (array) get_post_meta( $original, '_my_translations', true ) );
        if ( array() === array_filter( $copies ) ) {
            return $group;
        }
        $group['ids']      = array_merge( array( $original ), $copies );
        $group['original'] = $original;
        foreach ( $group['ids'] as $id ) {
            $group['languages'][ $id ] = (string) get_post_meta( $id, '_my_language', true );
        }
        return $group;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Le groupe est lu une fois par requête et mémorisé pour chaque membre : renvoyez le même groupe quel que soit le membre demandé.
  • La capacité de l’original vaut pour tout le groupe, les inscriptions de chaque traduction s’y imputent et un e-mail ne s’inscrit qu’une fois dans le groupe. HappenBoard Pro vend aussi les billets du groupe sur chaque traduction et compte leurs check-ins ensemble.
  • Les groupes mémorisés sont oubliés quand un événement est enregistré ou quand WPML ou Polylang relient des traductions. Si votre extension les relie autrement, appelez ensuite \HappenBoard\Integration\Multilingual\TranslationGroup::flush().

happenboard_event_submitted

Action Pro src/REST/EventSubmissions.php

Se déclenche quand l’événement proposé par un visiteur avec le bloc Event Submission Form a été enregistré en attente de relecture, avec tous ses détails. Utile pour prévenir un canal, étiqueter la proposition ou l’envoyer vers une file de modération externe.

Signature

do_action( 'happenboard_event_submitted', int $post_id, array<string,string> $data )

Paramètres

$post_id int
Le nouvel événement. Son statut vaut toujours pending.
$data array<string,string>
Trois clés : submitter_name, submitter_email (sans espaces superflus, en minuscules) et title.

Exemple

add_action(
    'happenboard_event_submitted',
    function ( $post_id, $data ) {
        // Garder la trace de l'auteur et étiqueter l'événement pour l'équipe de relecture.
        update_post_meta( $post_id, '_my_submitter_ref', sanitize_email( $data['submitter_email'] ) );
        wp_set_object_terms( $post_id, 'needs-review', 'happenboard_tag', true );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Le reste est déjà enregistré sur le post : dates et fuseau horaire en métadonnées _happenboard_*, l’auteur dans _happenboard_submitter_name et _happenboard_submitter_email, la catégorie éventuelle en terme happenboard_category.
  • Il ne se déclenche jamais pour une proposition refusée (formulaire désactivé, connexion requise, trop de tentatives, échec Turnstile) ni pour une proposition qu’Akismet classe en spam. Les événements créés dans l’administration, par import ou via l’API REST ne le déclenchent pas.
  • HappenBoard Pro écrit au modérateur depuis son propre callback en priorité 10. Le vôtre s’exécute en plus.

happenboard_event_deleting

Action Free src/Service/Events/EventDeletion.php

Se déclenche quand un événement est supprimé définitivement, avant que HappenBoard ne supprime ses participants un par un. Utile pour supprimer ce que votre extension garde pour chaque événement.

Signature

do_action( 'happenboard_event_deleting', int $event_id, array<int,int> $attendee_ids )

Paramètres

$event_id int
L’événement en cours de suppression.
$attendee_ids array<int,int>
Identifiants de ses participants, sur le point d’être supprimés. Sur un événement traduit, seulement ceux inscrits sur cette traduction.

Exemple

add_action(
    'happenboard_event_deleting',
    function ( int $event_id, array $attendee_ids ): void {
        global $wpdb;
        // Supprimer ce que notre extension stocke pour cet événement.
        $wpdb->delete( $wpdb->prefix . 'my_event_stats', array( 'event_id' => $event_id ), array( '%d' ) );
        error_log( sprintf( 'Event %d deleted with %d attendee(s).', $event_id, count( $attendee_ids ) ) );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2 pour recevoir les identifiants des participants.
  • Seule une suppression définitive le déclenche : depuis la corbeille, wp_delete_post( $id, true ), une suppression forcée par REST ou WP-CLI, l’ability delete-event. La mise à la corbeille ne supprime rien.
  • Le post, ses métadonnées et ses participants sont encore lisibles. Ses lignes de dates ont déjà disparu : lisez les dates dans les métadonnées de l’événement, pas dans la table des dates.
  • Chaque participant est ensuite supprimé et déclenche happenboard_attendee_deleted. HappenBoard Pro écoute ici d’abord pour supprimer billets, réservations de places, ventes et check-ins ; quand une seule traduction est supprimée, il déplace les billets vers une traduction qui reste.

happenboard_event_description_allowed_html

Filtre Free src/Block/EventDescription/Block.php

Filtre le HTML autorisé dans le bloc Event Description. Le bloc applique the_content (ou the_excerpt avec son réglage Excerpt only), puis wp_kses() retire toute balise et tout attribut absents de cette liste.

Signature

apply_filters( 'happenboard_event_description_allowed_html', array<string,array<string,mixed>> $allowed )

Paramètres

$allowed array<string,array<string,mixed>>
Liste KSES, nom de balise vers attributs autorisés : wp_kses_allowed_html( 'post' ) plus iframe, video, audio, source, track et les champs des blocs de formulaire HappenBoard.

Valeur de retour

array<string,array<string,mixed>> La liste transmise à wp_kses(). Elle est convertie avec (array) : null ou false retire toutes les balises.

Exemple

add_filter(
    'happenboard_event_description_allowed_html',
    function ( $allowed ) {
        // Autoriser les sections repliables dans les descriptions.
        $allowed['details'] = array( 'open' => true, 'class' => true );
        $allowed['summary'] = array( 'class' => true );
        return $allowed;
    }
);

Remarques

  • Un seul argument.
  • Complétez la liste plutôt que de retirer ce que le bloc ajoute. Sans ces entrées, les iframes oEmbed, les médias hébergés sur le site, ou un bloc RSVP Form ou Ticket Picker placé dans la description ne fonctionnent plus.
  • Il s’exécute après the_content : il ne peut pas rétablir un balisage qu’une autre extension a retiré. Il ne s’exécute pas pour un événement protégé par mot de passe (le bloc affiche le formulaire de mot de passe) ni pour une description vide.

happenboard_schema_event_type

Filtre Free src/Service/Schema/EventSchemaBuilder.php

Définit le @type du JSON-LD Event. Renvoyez un sous-type d’Event de schema.org (MusicEvent, Festival, SportsEvent…) pour que les moteurs de recherche classent l’événement plus finement.

Signature

apply_filters( 'happenboard_schema_event_type', string $type, int $event_id, \WP_Post $post )

Paramètres

$type string
Par défaut 'Event'.
$event_id int
L’identifiant de l’événement.
$post \WP_Post
Le post de l’événement.

Valeur de retour

string La valeur écrite dans @type, sans contrôle.

Exemple

add_filter(
    'happenboard_schema_event_type',
    function ( $type, $event_id, $post ) {
        // Les concerts sont des événements musicaux pour les moteurs de recherche.
        if ( has_term( 'concerts', 'happenboard_category', $post ) ) {
            return 'MusicEvent';
        }
        return $type;
    },
    10,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • Il s’exécute en premier dans la chaîne du balisage, et happenboard_schema_event peut encore réécrire @type ensuite.
  • Renvoyez un sous-type d’Event. Un autre type garde des propriétés d’Event comme startDate, et Google signale des données structurées invalides.

happenboard_schema_event

Filtre Free src/Service/Schema/EventSchemaBuilder.php

Filtre le JSON-LD Event complet juste avant son affichage sur la page de l’événement et sa réponse par GET /happenboard/v1/events/{id}/schema. Utile pour ajouter des propriétés ou réécrire ce que HappenBoard a construit.

Signature

apply_filters( 'happenboard_schema_event', array<string,mixed> $schema, int $event_id, \WP_Post $post )

Paramètres

$schema array<string,mixed>
Le contenu. Contient toujours @context, @type, name, description, startDate, endDate, eventStatus, inLanguage, url, eventAttendanceMode et location (un VirtualLocation sans lieu). image, organizer, offers, isAccessibleForFree, maximumAttendeeCapacity et remainingAttendeeCapacity apparaissent quand ils s’appliquent.
$event_id int
L’identifiant de l’événement.
$post \WP_Post
Le post de l’événement, déjà chargé.

Valeur de retour

array<string,mixed>|null Le tableau à encoder. null retire le JSON-LD de la page et fait répondre 404 à la route REST. Tout autre type provoque une erreur fatale TypeError.

Exemple

add_filter(
    'happenboard_schema_event',
    function ( $schema, $event_id, $post ) {
        // Ajouter la tranche d'âge et les étiquettes de l'événement.
        $schema['typicalAgeRange'] = (string) get_post_meta( $event_id, '_my_age_range', true );
        $schema['keywords']        = wp_get_post_terms( $post->ID, 'happenboard_tag', array( 'fields' => 'names' ) );
        return $schema;
    },
    10,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • startDate et endDate sont ceux de la date décrite par la page : celle en cours, sinon la suivante, sinon la dernière. Un événement avec des billets dont aucun n’est en vente n’a pas d’offers et n’est pas indiqué gratuit.
  • Sur la page de l’événement, il ne s’exécute pas quand happenboard_schema_disable renvoie true ou que SEOPress a un balisage Event manuel pour ce post. La route REST ne vérifie ni l’un ni l’autre.
  • Les brouillons, les aperçus et les événements sans aucune date ne l’atteignent jamais.

happenboard_event_rewrite_slug

Filtre Free src/Settings/Permalinks.php

Définit la base des événements, le premier segment de chaque adresse : les événements sous /{base}/{event}/, l’archive sous /{base}/, la page de toutes les dates sous /{base}/{event}/all-dates/. Il prend le pas sur le champ Event base de Réglages → Permaliens.

Signature

apply_filters( 'happenboard_event_rewrite_slug', string $base )

Paramètres

$base string
La base enregistrée dans Event base, déjà nettoyée, ou 'events' si le champ est vide.

Valeur de retour

string La base. Chaque segment séparé par / passe par sanitize_title() ; un résultat vide revient à events.

Exemple

add_filter(
    'happenboard_event_rewrite_slug',
    function ( $base ) {
        // Les événements sont sous /agenda/{event}/.
        return 'agenda';
    }
);

Remarques

  • Un seul argument. Ajoutez-le depuis une extension ou functions.php : la base est lue à l’enregistrement du type de contenu, sur init.
  • Renvoyez la même valeur à chaque requête. Les règles de réécriture sont reconstruites au chargement suivant d’une page d’administration, jamais sur le site public : ouvrez une fois un écran d’administration après avoir ajouté le filtre.
  • Après un changement, l’ancienne base est mémorisée (les cinq dernières) et ses adresses redirigent (301) vers les nouvelles. Le champ Event base indique alors qu’un filtre fixe la base.
  • La règle de la page de toutes les dates suit la base d’elle-même : happenboard_series_rewrite_prefix n’est pas nécessaire pour cela.

happenboard_rewrite_rules_repaired

Action Free src/Settings/Permalinks.php

Se déclenche après que HappenBoard a reconstruit les règles de réécriture enregistrées, qui avaient perdu celles de ses événements et types de rendez-vous (ces pages répondaient 404). Un autre outil a reconstruit les règles sans HappenBoard chargé : utilisez l’action pour prévenir quelqu’un, car la cause risque de revenir.

Signature

do_action( 'happenboard_rewrite_rules_repaired', array<int,string> $missing )

Paramètres

$missing array<int,string>
Types de contenu sans règle : hboard_event, hboard_booking_type ou les deux.

Exemple

add_action(
    'happenboard_rewrite_rules_repaired',
    function ( array $missing ): void {
        // Prévenir l'administrateur pour qu'il cherche la cause.
        wp_mail(
            get_option( 'admin_email' ),
            'HappenBoard rebuilt the rewrite rules',
            'Rules were missing for: ' . implode( ', ', $missing )
        );
    }
);

Remarques

  • Un seul argument. Les règles sont déjà reconstruites et la réparation est écrite dans le journal d’erreurs PHP.
  • La vérification ne tourne qu’au chargement des pages d’administration, au plus une fois par heure, avec des permaliens personnalisés. Tant que personne n’ouvre l’administration, le site public répond 404.
  • Un changement de base des événements reconstruit aussi les règles, sans déclencher cette action.

happenboard_series_rewrite_prefix

Filtre Free src/FSE/SeriesRewrite.php

Définit le premier segment de la règle de réécriture de la page de toutes les dates (/{base}/{event}/all-dates/). Par défaut c’est la base des événements : il ne sert que si les adresses des événements ont été déplacées autrement.

Signature

apply_filters( 'happenboard_series_rewrite_prefix', string $prefix )

Paramètres

$prefix string
La base des événements (events sauf changement). Elle est traitée comme un chemin littéral.

Valeur de retour

string Le préfixe. Il sert seulement à construire le motif par défaut passé à happenboard_series_rewrite_pattern.

Exemple

add_filter(
    'happenboard_series_rewrite_prefix',
    function ( $prefix ) {
        // Une autre extension a déplacé nos événements sous /agenda/.
        return 'agenda';
    }
);

Remarques

  • Un seul argument. Il s’exécute sur init en priorité 25 : enregistrez-le avant, puis videz les règles de réécriture (enregistrez Réglages → Permaliens). HappenBoard ne les vide de lui-même qu’au changement de base des événements.
  • HappenBoard pointe vers la page avec le permalien de l’événement suivi de all-dates/. La règle obtenue doit toujours correspondre à ces liens.

happenboard_series_rewrite_pattern

Filtre Free src/FSE/SeriesRewrite.php

Remplace l’expression régulière de la règle de la page de toutes les dates. Utile quand les adresses des événements ne sont pas la base suivie du slug.

Signature

apply_filters( 'happenboard_series_rewrite_pattern', string $pattern )

Paramètres

$pattern string
Par défaut '^' . preg_quote( $prefix, '/' ) . '/([^/]+)/all-dates/?$', où $prefix vient de happenboard_series_rewrite_prefix.

Valeur de retour

string L’expression passée à add_rewrite_rule(). Le groupe 1 doit capturer le slug de l’événement : la cible est index.php?post_type=hboard_event&name=$matches[1]&happenboard_view=series.

Exemple

add_filter(
    'happenboard_series_rewrite_pattern',
    function ( $pattern ) {
        // Les adresses des événements sont /agenda/{category}/{slug}/.
        return '^agenda/[^/]+/([^/]+)/all-dates/?$';
    }
);

Remarques

  • Un seul argument. Même moment que le filtre du préfixe : enregistrez-le avant init priorité 25, puis videz les règles de réécriture.
  • Gardez le ^ initial du motif par défaut. Un groupe capturant avant le slug le décale et la page répond 404.
  • Votre motif doit correspondre aux liens de HappenBoard vers la page : le permalien de l’événement suivi de all-dates/.

happenboard_series_url

Filtre Free src/FSE/SeriesRewrite.php

Renvoie l’adresse de la page de toutes les dates d’un événement, pour les thèmes et extensions qui y renvoient. HappenBoard y répond en priorité 10 mais ne l’utilise pas pour ses propres liens.

Signature

apply_filters( 'happenboard_series_url', string $url, WP_Post|int $post )

Paramètres

$url string
Valeur renvoyée si $post n’est pas un événement. Passez ''.
$post WP_Post|int
L’événement, en objet post ou en identifiant.

Valeur de retour

string L’adresse de la page : le permalien suivi de all-dates/, ou le permalien avec ?happenboard_view=series avec les permaliens simples. $url inchangé si le post n’est pas un événement.

Exemple

// Dans un modèle de thème : lien vers toutes les dates de l'événement courant.
$all_dates = apply_filters( 'happenboard_series_url', '', get_the_ID() );
if ( '' !== $all_dates ) {
    printf(
        '<a href="%s">%s</a>',
        esc_url( $all_dates ),
        esc_html__( 'All dates', 'my-theme' )
    );
}

Remarques

  • Appelez-le avec '' puis le post. Appelé avec le post seul, un post qui n’est pas un événement revient tel quel comme valeur.
  • Pour changer l’adresse, accrochez-vous avec 10, 2 en priorité supérieure à 10, après HappenBoard. Son propre lien See all dates ne passe pas par ce filtre.

happenboard_pro_gcal_event_payload

Filtre Pro src/Service/Calendar/Push/EventMapper.php

Filtre l’événement Google Calendar que HappenBoard Pro envoie quand il crée ou met à jour la copie d’un événement. Ajoutez des rappels, des invités ou d’autres champs Google, ou modifiez ce qui a été converti.

Signature

apply_filters( 'happenboard_pro_gcal_event_payload', array<string,mixed> $payload, WP_Post $event )

Paramètres

$payload array<string,mixed>
Ressource Event de Google avec summary, description, location, status, extendedProperties, start et end, plus recurrence pour un événement récurrent.
$event WP_Post
Le post de l’événement. Lisez ses métadonnées avec get_post_meta().

Valeur de retour

array<string,mixed> La ressource envoyée à Google. Elle est convertie avec (array).

Exemple

add_filter(
    'happenboard_pro_gcal_event_payload',
    function ( $payload, $event ) {
        // Un rappel une heure avant chaque événement.
        $payload['reminders'] = array(
            'useDefault' => false,
            'overrides'  => array( array( 'method' => 'popup', 'minutes' => 60 ) ),
        );
        return $payload;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Gardez extendedProperties.private.happenboard_origin. La synchronisation entrante s’en sert pour reconnaître les événements de HappenBoard ; sans lui, la synchronisation suivante peut réimporter l’événement en double.
  • Le même contenu sert à la création et à la mise à jour, et une mise à jour envoie toute la ressource : une clé retirée l’est aussi chez Google. Un champ invalide fait échouer l’envoi. La corbeille et la suppression envoient des requêtes à part, sans ce filtre.
  • Ajouter conferenceData n’a aucun effet : Pro n’envoie pas le paramètre conferenceDataVersion dont Google a besoin pour créer un lien Meet.

happenboard_pro_outlook_event_payload

Filtre Pro src/Service/Calendar/Push/OutlookEventMapper.php

Filtre l’événement Microsoft Graph que HappenBoard Pro envoie à Outlook quand il crée ou met à jour la copie d’un événement. Même rôle que happenboard_pro_gcal_event_payload côté Google.

Signature

apply_filters( 'happenboard_pro_outlook_event_payload', array<string,mixed> $payload, WP_Post $event )

Paramètres

$payload array<string,mixed>
Ressource Event de Graph avec subject, body, location, isAllDay, isCancelled, showAs, singleValueExtendedProperties, start et end, plus recurrence quand la règle de répétition peut être convertie.
$event WP_Post
Le post de l’événement.

Valeur de retour

array<string,mixed> La ressource envoyée à Graph. Elle est convertie avec (array).

Exemple

add_filter(
    'happenboard_pro_outlook_event_payload',
    function ( $payload, $event ) {
        $payload['categories'] = array( 'HappenBoard' );
        // Placer le titre au-dessus de la description synchronisée.
        $payload['body']['content'] = '<p>' . esc_html( get_the_title( $event ) ) . '</p>'
            . $payload['body']['content'];
        return $payload;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Gardez l’entrée de singleValueExtendedProperties dont l’identifiant se termine par happenboard_origin, pour la même raison que chez Google : sans elle, l’événement peut être réimporté.
  • body.content est du HTML qui se termine par un pied « Synced from HappenBoard », coupé à 16 384 caractères. Ajoutez votre texte avant, comme dans l’exemple.
  • Les événements sur la journée entière suivent les règles de Graph (de minuit à minuit le lendemain, même fuseau aux deux bouts) : réécrivez start et end avec prudence. La corbeille envoie une mise à jour isCancelled à part et la suppression définitive efface la copie ; aucune ne passe par ce filtre.

Pour aller plus loin