Hooks blocs, balisage et rendu

Disponible dans :Free

Ces hooks agissent sur ce que voient les visiteurs et les moteurs de recherche. Ils concernent les listes d’événements, les thèmes classiques, les pages de lieu et d’organisateur, les cartes, la météo, les couleurs de catégorie, le flux iCal et le balisage Event. La plupart s’exécutent à chaque affichage : gardez des callbacks rapides et évitez les requêtes supplémentaires.

Côté éditeur, voyez Construire une page d’événement et le balisage Event automatique. Si les hooks sont nouveaux pour vous, commencez par Étendre HappenBoard avec les hooks.

Ce que HappenBoard ajoute aux pages du thème

Sur un thème de blocs, les modèles de HappenBoard placent ses blocs. Un thème classique ne lit pas ces modèles : HappenBoard ajoute donc lui-même les blocs :

  • autour du contenu d’un événement ou de la page d’un type de rendez-vous (happenboard_classic_theme_blocks) ;
  • sur l’archive des événements et les archives de catégorie et d’étiquette d’événements (happenboard_classic_theme_archive_blocks).

Les pages de lieu et d’organisateur reçoivent leur adresse, leurs coordonnées et leurs événements à venir sur les deux types de thème (happenboard_venue_organizer_page). Sous Astra, la ligne d’article du thème (auteur et date) est masquée sur les pages d’événement, de lieu, d’organisateur et de type de rendez-vous (happenboard_hide_theme_entry_meta). Pour les propriétaires de site, voyez Est-ce que cela fonctionnera avec mon thème ?.

Comment le balisage Event est construit

Sur une page d’événement, HappenBoard écrit un JSON-LD Event dans l’en-tête de la page :

  1. happenboard_schema_disable décide si quelque chose est affiché.
  2. happenboard_schema_event_type fixe le @type.
  3. happenboard_schema_offers rassemble les offres. HappenBoard Pro en ajoute une par billet en vente.
  4. Sans offre, happenboard_event_is_ticketed tranche : un événement à billets n’a pas d’offre, tout autre événement reçoit une Offer gratuite dans la devise de happenboard_schema_fallback_currency, complète quand la capacité des inscriptions est atteinte.
  5. happenboard_schema_event reçoit le tableau terminé.

happenboard_schema_event_type et happenboard_schema_event sont décrits dans Hooks événements, récurrence et séries.

happenboard_query_attributes

Filtre Free src/Block/EventQueryLoop/Block.php

Filtre les attributs des quatre blocs de liste d’événements au début de leur rendu, avant toute lecture. $context indique quel bloc s’affiche : un seul callback peut servir les quatre.

Signature

apply_filters( 'happenboard_query_attributes', array<string,mixed> $attributes, string $context )

Paramètres

$attributes array<string,mixed>
Les attributs enregistrés du bloc, tels que modifiés par les callbacks précédents. Une clé absente reprend la valeur par défaut du bloc.
$context string
event-query-loop, events-grid, events-list ou upcoming-events.

Valeur de retour

array<string,mixed> Les attributs que le bloc lit. Une valeur qui n’est pas un tableau devient un tableau vide, et chaque attribut reprend sa valeur par défaut.

Exemple

add_filter(
    'happenboard_query_attributes',
    function ( $attributes, $context ) {
        if ( 'event-query-loop' !== $context ) {
            return $attributes;
        }

        // Les visiteurs non connectés ne voient que la catégorie « Public » (terme 12).
        if ( ! is_user_logged_in() ) {
            $attributes['categoryIds'] = array( 12 );
        }

        return $attributes;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2 pour distinguer les blocs.
  • Les blocs ne lisent pas les mêmes clés. event-query-loop les lit toutes, dont dateRange (upcoming, today, this_week, this_month, next_month, this_year, past, all, ou custom avec dateFrom et dateTo), organizerId, layout et order. events-list et events-grid lisent count, categoryIds, tagIds, venueId et search. upcoming-events ne lit que count.
  • Les valeurs sont bornées après le filtre : count vaut au plus 50, ou 24 pour events-grid. Le filtre s’exécute aussi pour les événements à venir listés sur les pages de lieu et d’organisateur (un event-query-loop avec venueId ou organizerId).
  • HappenBoard Pro s’y branche en priorité 10 pour appliquer les paramètres d’URL de la Filter Bar (happenboard_categories, happenboard_tags, happenboard_venue, happenboard_organizer, happenboard_q, happenboard_range), sur tous les blocs sauf upcoming-events.

happenboard_classic_theme_blocks

Filtre Free src/Service/Frontend/ClassicThemeContent.php

Filtre les blocs que HappenBoard ajoute autour du contenu d’un événement, ou de la page d’un type de rendez-vous, sur un thème classique. Le single.php d’un thème classique n’affiche que le titre, l’image et le contenu : HappenBoard ajoute donc les blocs du modèle d’événement via the_content.

Signature

apply_filters( 'happenboard_classic_theme_blocks', array{before:array,after:array} $blocks, WP_Post $post )

Paramètres

$blocks array{before:array,after:array}
Deux listes d’entrées blockName / attrs, affichées avant et après le contenu. Pour un événement : happenboard/event-date-time et happenboard/countdown avant ; happenboard/rsvp-form, happenboard/event-series-occurrences (titré « Upcoming dates »), happenboard/event-venue, happenboard/event-organizer, happenboard/add-to-calendar et happenboard/event-categories-tags après. Sur la page « All dates » d’une série : la date et la liste complète des dates avant, rien après, et pas de contenu. Pour un type de rendez-vous : happenboard/booking-page après.
$post WP_Post
L’événement ou le type de rendez-vous affiché.

Valeur de retour

array{before:array,after:array} Les deux listes à afficher. Videz-les toutes deux pour retirer les détails, pour un thème qui affiche les siens. Une valeur qui n’est pas un tableau laisse le contenu tel quel.

Exemple

add_filter(
    'happenboard_classic_theme_blocks',
    function ( $blocks, $post ) {
        if ( 'hboard_event' !== $post->post_type ) {
            return $blocks;
        }

        // Ajouter la météo à la fin des détails.
        $blocks['after'][] = array(
            'blockName' => 'happenboard/event-weather',
            'attrs'     => array(),
        );

        return $blocks;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Thèmes classiques uniquement, pour l’événement ou le type de rendez-vous de la requête principale, dans la boucle. Il ne s’exécute pas sur un thème de blocs, quand un modèle de blocs contient déjà des blocs HappenBoard, ni pour les extraits, les flux, les réponses REST et les boucles secondaires.
  • Les blocs déjà présents dans le contenu sont retirés des listes avant le filtre : une page mise en forme à la main ne les affiche pas deux fois. Un bloc que vous rajoutez s’affiche quand même.
  • Il s’exécute sur the_content en priorité 20. Chaque entrée est rendue avec render_block(), sans blocs internes : utilisez des blocs rendus côté serveur, et comptez avec les filtres render_block. Sur un événement payant, HappenBoard Pro affiche le Ticket Picker à la place du formulaire RSVP.

happenboard_classic_theme_archive_blocks

Filtre Free src/Service/Frontend/ClassicThemeContent.php

Filtre les blocs que HappenBoard affiche sur l’archive des événements et sur les archives de catégorie et d’étiquette d’événements, sur un thème classique. Ces archives affichent alors les blocs des modèles des thèmes de blocs, entre l’en-tête et le pied de page du thème, au lieu de lister les événements comme des articles.

Signature

apply_filters( 'happenboard_classic_theme_archive_blocks', array<int,array{blockName:string,attrs:array<string,mixed>}> $blocks, string $kind )

Paramètres

$blocks array<int,array{blockName:string,attrs:array<string,mixed>}>
Les blocs dans l’ordre d’affichage. L’archive des événements reçoit happenboard/calendar et happenboard/events-list (10 événements, groupés par mois, avec les lieux). Une archive de catégorie ou d’étiquette reçoit happenboard/events-grid (12 événements, 3 colonnes, avec image, date et lieu).
$kind string
events, category ou tag.

Valeur de retour

array<int,array{blockName:string,attrs:array<string,mixed>}> Les blocs à afficher. Renvoyez un tableau vide pour garder le modèle d’archive du thème ; une valeur qui n’est pas un tableau compte comme vide.

Exemple

add_filter(
    'happenboard_classic_theme_archive_blocks',
    function ( $blocks, $kind ) {
        if ( 'events' !== $kind ) {
            return $blocks;
        }

        // Garder la liste à venir, retirer le calendrier mensuel au-dessus.
        return array_values(
            array_filter(
                $blocks,
                fn ( $block ) => 'happenboard/calendar' !== $block['blockName']
            )
        );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2 pour recevoir $kind.
  • Thèmes classiques uniquement. HappenBoard ne remplace que les modèles génériques du thème (archive.php, taxonomy.php, index.php). Un archive-hboard_event.php ou un taxonomy-happenboard_category.php propre au thème est conservé, tout comme un modèle de blocs attribué dans l’Éditeur de site.
  • Il s’exécute au moins deux fois par requête : sur template_include, pour décider du changement de modèle, puis à la construction de la page. Évitez tout effet de bord dans le callback.
  • Le titre de la page et le conteneur main ne font pas partie de la liste. Sur une archive de catégorie ou d’étiquette, happenboard/events-grid se limite au terme affiché, et suit la pagination de l’archive, quand ses categoryIds et tagIds sont vides.

happenboard_hide_theme_entry_meta

Filtre Free src/Integration/Themes/Astra.php

Filtre si la ligne d’article du thème Astra (auteur, date, commentaires) est masquée sur les pages HappenBoard : événements, lieux, organisateurs et types de rendez-vous. Renvoyez false pour l’afficher.

Signature

apply_filters( 'happenboard_hide_theme_entry_meta', bool $hide )

Paramètres

$hide bool
Par défaut true.

Valeur de retour

bool true pour masquer la ligne d’Astra, false pour la garder.

Exemple

add_filter(
    'happenboard_hide_theme_entry_meta',
    function ( $hide ) {
        // Garder la ligne d'Astra sur les pages d'organisateur uniquement.
        if ( is_singular( 'hboard_organizer' ) ) {
            return false;
        }

        return $hide;
    }
);

Remarques

  • Un argument, sans l’article : testez la page avec is_singular(). Les types de contenu sont hboard_event, hboard_venue, hboard_organizer et hboard_booking_type.
  • Il ne s’exécute que sous Astra, depuis le filtre astra_single_post_meta d’Astra, et seulement sur ces pages, page « All dates » d’une série comprise.
  • Les autres thèmes ne sont pas concernés : GeneratePress limite déjà ses métadonnées aux articles, et les thèmes de blocs utilisent les modèles de HappenBoard.

happenboard_venue_organizer_page

Filtre Free src/Service/Frontend/VenueOrganizerPages.php

Filtre ce que HappenBoard ajoute après le contenu de la page d’un lieu ou d’un organisateur : la description, les coordonnées, une carte intégrée et les événements à venir. Il s’exécute sur les thèmes de blocs comme sur les thèmes classiques.

Signature

apply_filters( 'happenboard_venue_organizer_page', array{description:bool,details:bool,map:bool,upcoming:int} $parts, WP_Post $post )

Paramètres

$parts array{description:bool,details:bool,map:bool,upcoming:int}
description : la description du lieu ou la présentation de l’organisateur, affichée quand l’article n’a pas de contenu propre (par défaut true). details : l’adresse d’un lieu avec un lien vers le service de cartes, le téléphone, le site web et l’e-mail d’un organisateur (par défaut true). map : la carte intégrée d’un lieu sous son adresse (par défaut false). upcoming : le nombre d’événements à venir listés (10 par défaut, 50 au plus, 0 pour aucun).
$post WP_Post
Le lieu (hboard_venue) ou l’organisateur (hboard_organizer) affiché.

Valeur de retour

array|false Les parties à afficher ; une clé absente garde sa valeur par défaut. Renvoyez false pour ne rien ajouter, pour un thème qui affiche ses propres détails.

Exemple

add_filter(
    'happenboard_venue_organizer_page',
    function ( $parts, $post ) {
        if ( 'hboard_venue' === $post->post_type ) {
            // Les pages de lieu affichent leur carte et les 5 prochains événements.
            $parts['map']      = true;
            $parts['upcoming'] = 5;
        }

        return $parts;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2 pour recevoir l’article.
  • La carte est désactivée par défaut car elle se charge depuis un service tiers : OpenStreetMap, ou Google Maps quand c’est le fournisseur de cartes et qu’une clé d’API est réglée. Activée, elle passe par happenboard_venue_map_iframe_src et happenboard_venue_map_html, et le Map Design Studio de HappenBoard Pro lui applique son style.
  • Il s’exécute sur the_content en priorité 20, pour le lieu ou l’organisateur de la requête principale uniquement. Il ne s’exécute pas quand le modèle de blocs de la page contient déjà des blocs HappenBoard, ni pour un article protégé par mot de passe.
  • La liste à venir est un bloc Event Query Loop : happenboard_query_attributes s’exécute donc aussi pour elle, avec le contexte event-query-loop.

happenboard_venue_map_iframe_src

Filtre Free src/Block/EventVenue/Block.php

Filtre l’URL chargée dans l’iframe de la carte du lieu, sans toucher au reste du code HTML. La hauteur, le chargement différé, le titre et la politique de référent de la sortie par défaut sont conservés.

Signature

apply_filters( 'happenboard_venue_map_iframe_src', string $src, string $provider, array $context )

Paramètres

$src string
L’URL construite pour le fournisseur : l’intégration OpenStreetMap, l’URL de Google Maps Embed API, ou le modèle d’URL d’iframe personnalisé avec {lat}, {lng} et {zoom} remplacés.
$provider string
osm, google ou custom.
$context array
lat (float), lng (float), zoom (int) et name (string).

Valeur de retour

string L’URL de l’iframe. Elle passe ensuite par esc_url() : une URL data: ou javascript: finit vide.

Exemple

add_filter(
    'happenboard_venue_map_iframe_src',
    function ( $src, $provider, $context ) {
        // Votre propre serveur de cartes.
        return add_query_arg(
            array(
                'lat'  => $context['lat'],
                'lng'  => $context['lng'],
                'zoom' => $context['zoom'],
            ),
            'https://maps.example.com/embed'
        );
    },
    10,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • Il s’exécute pour la carte du bloc Event Venue et pour celle d’une page de lieu, avant happenboard_venue_map_html. Quand le Map Design Studio de HappenBoard Pro remplace tout le code HTML sur ce second filtre, l’URL renvoyée ici n’est pas utilisée.
  • Le fournisseur repasse à osm quand google n’a pas de clé d’API ou custom pas de modèle d’URL : un callback qui ne traite que custom peut donc ne jamais agir.

happenboard_venue_map_html

Filtre Free src/Block/EventVenue/Block.php

Filtre tout le code HTML de la carte d’un lieu : celle du bloc Event Venue et celle d’une page de lieu. La chaîne renvoyée est affichée telle quelle, sans échappement ensuite : l’échappement est à votre charge.

Signature

apply_filters( 'happenboard_venue_map_html', string $html, string $provider, array $context )

Paramètres

$html string
Le code par défaut : un élément dd contenant une iframe à chargement différé, déjà échappé.
$provider string
osm, google ou custom.
$context array
lat, lng, zoom, height, name et settings (les réglages généraux, clés secrètes masquées).

Valeur de retour

string Le code HTML à afficher.

Exemple

add_filter(
    'happenboard_venue_map_html',
    function ( $html, $provider, $context ) {
        // Un conteneur que votre propre script de carte remplit.
        return sprintf(
            '<dd class="my-map" data-lat="%s" data-lng="%s" data-zoom="%d" style="height:%dpx"></dd>',
            esc_attr( (string) $context['lat'] ),
            esc_attr( (string) $context['lng'] ),
            (int) $context['zoom'],
            (int) $context['height']
        );
    },
    20,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3 ou plus tard.
  • Dans $context['settings'], les clés Google Maps, météo, Turnstile et Akismet sont masquées ; un booléen <clé>_set indique si chacune est réglée.
  • Il ne s’exécute que s’il y a une carte à afficher. Pour le bloc : « Show map » est activé, l’événement n’est pas virtuel et le lieu a des coordonnées. Pour une page de lieu : sa partie map est activée.
  • HappenBoard Pro s’y branche en priorité 10. Quand un modèle du Map Design Studio est choisi, il renvoie un conteneur MapLibre à la place de l’iframe. Un callback plus tardif reçoit ce conteneur, mais $provider nomme toujours le fournisseur de HappenBoard.

happenboard_pro_map_style

Filtre Pro src/Service/Maps/MapStyle.php

Filtre le style MapLibre d’une carte HappenBoard Pro : le bloc Events Clustered Map, et les cartes de lieu stylées par le Map Design Studio. Renvoyez n’importe quel style MapLibre (version 8), par exemple un style vectoriel d’un fournisseur de tuiles.

Signature

apply_filters( 'happenboard_pro_map_style', array<string,mixed> $style, string $context, string $template )

Paramètres

$style array<string,mixed>
Le style MapLibre : le préréglage choisi, le JSON personnalisé collé ou, pour la Clustered Map sans modèle, le style OpenStreetMap par défaut.
$context string
clustered-map ou venue-map.
$template string
Le modèle du Map Design Studio : off, custom ou un préréglage (light, dark, sepia, minimal, brand, satellite).

Valeur de retour

array<string,mixed> Le style à utiliser. Une valeur qui n’est pas un tableau avec une clé version est ignorée, et le style d’origine est gardé.

Exemple

add_filter(
    'happenboard_pro_map_style',
    function ( $style, $context, $template ) {
        if ( 'clustered-map' !== $context ) {
            return $style;
        }

        // Un style vectoriel fourni avec le thème.
        $json   = file_get_contents( get_stylesheet_directory() . '/map-style.json' );
        $custom = json_decode( (string) $json, true );

        return is_array( $custom ) ? $custom : $style;
    },
    10,
    3
);

Remarques

  • Trois arguments : enregistrez avec 10, 3.
  • Sur les cartes de lieu, il ne s’exécute que si un modèle du Map Design Studio est choisi. Avec off, les cartes de lieu restent l’iframe de HappenBoard et ce filtre ne s’exécute pas pour elles. La Clustered Map utilise toujours MapLibre : il s’y exécute donc toujours.
  • Le style est écrit dans la page, en JSON dans un attribut data-style, à chaque affichage de carte : gardez un callback rapide, et considérez tout son contenu comme public.
  • Pour ne changer que les tuiles raster, happenboard_pro_map_tile_source est plus simple.

happenboard_pro_map_tile_source

Filtre Pro src/Service/Maps/StylePresets.php

Filtre les tuiles raster des cartes de HappenBoard Pro : le style par défaut de la Clustered Map et chaque préréglage du Map Design Studio sauf Satellite. Utile pour quitter les serveurs de tuiles d’OpenStreetMap, qui demandent aux sites très fréquentés de passer par un autre fournisseur.

Signature

apply_filters( 'happenboard_pro_map_tile_source', array{tiles:array<int,string>,tileSize:int,attribution:string} $source )

Paramètres

$source array{tiles:array<int,string>,tileSize:int,attribution:string}
tiles : modèles d’URL XYZ avec {z}, {x} et {y} (par défaut https://tile.openstreetmap.org/{z}/{x}/{y}.png). tileSize : 256 par défaut. attribution : la mention OpenStreetMap, en HTML.

Valeur de retour

array La source de tuiles. Seules les URL HTTPS sont gardées ; s’il n’en reste aucune, la source OpenStreetMap est utilisée. tileSize doit valoir 256 ou 512 (sinon 256), et attribution ne garde que les liens.

Exemple

add_filter(
    'happenboard_pro_map_tile_source',
    function ( $source ) {
        // Des tuiles de votre propre fournisseur.
        return array(
            'tiles'       => array( 'https://tiles.example.com/{z}/{x}/{y}.png?key=PUBLIC_KEY' ),
            'tileSize'    => 256,
            'attribution' => '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
        );
    }
);

Remarques

  • Un argument.
  • Il ne change ni le préréglage Satellite (images Esri) ni un style personnalisé collé en JSON. Pour remplacer un style entier, utilisez happenboard_pro_map_style.
  • Les URL de tuiles sont chargées par le navigateur de vos visiteurs et figurent dans la page : toute clé qu’elles contiennent est publique. Utilisez une clé limitée à votre domaine.
  • Il ne concerne que les cartes MapLibre de Pro. La carte en iframe de HappenBoard (Map Design Studio sur off) utilise le fournisseur de cartes des réglages ; changez son URL avec happenboard_venue_map_iframe_src.

happenboard_weather_data

Filtre Free src/Service/Weather/WeatherRepository.php

Filtre les données météo que reçoit le bloc Event Weather, après le cache et l’éventuelle requête à Open-Meteo. Ajoutez des champs ou corrigez des valeurs sans nouvelle requête.

Signature

apply_filters( 'happenboard_weather_data', array<string,mixed> $result, array{lat:float,lng:float,date:string,regime:string} $ctx )

Paramètres

$result array<string,mixed>
Les données du jour, avec regime (historical, forecast ou climatology), date et unit_labels. Le bloc lit weather_code, is_day, temp, temp_max, temp_min, precip_probability, wind_max, regime et unit_labels.
$ctx array{lat:float,lng:float,date:string,regime:string}
La demande : lat, lng, date (Y-m-d dans le fuseau du site) et regime.

Valeur de retour

array<string,mixed> Les données que le bloc affiche. Gardez toutes les clés que le bloc lit.

Exemple

add_filter(
    'happenboard_weather_data',
    function ( $result, $ctx ) {
        // Moyennes saisonnières : masquer la maximale du jour.
        if ( 'climatology' === $ctx['regime'] ) {
            $result['temp_max'] = null;
        }

        return $result;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • Rien ne se déclenche tant que la météo n’est pas activée (« Enable weather » sur la carte Weather de l’écran Integrations). Il ne s’exécute pas non plus pour des coordonnées hors limites, une date mal formée ou une requête qui a échoué.
  • Il s’exécute après le cache : vos modifications sont appliquées à chaque affichage et jamais enregistrées.
  • regime fixe la classe CSS du bloc (is-regime-*) et son libellé. Le supprimer ou le renommer casse l’affichage.

happenboard_term_color_presets

Filtre Free src/Taxonomy/ColorPresets.php

Filtre les pastilles proposées par les sélecteurs de couleur de HappenBoard : la couleur des catégories d’événements, dans l’administration et dans l’éditeur de blocs, et la couleur d’accent des types de rendez-vous.

Signature

apply_filters( 'happenboard_term_color_presets', array<int,array{name:string,color:string}> $presets )

Paramètres

$presets array<int,array{name:string,color:string}>
Dix pastilles par défaut, chacune avec name (libellé traduit) et color (#rrggbb en minuscules).

Valeur de retour

array<int,array{name:string,color:string}> Les pastilles. Chaque entrée est vérifiée ensuite, et une entrée mal formée est retirée.

Exemple

add_filter(
    'happenboard_term_color_presets',
    function ( $presets ) {
        // Ajouter la couleur de votre marque aux sélecteurs.
        $presets[] = array(
            'name'  => 'Brand',
            'color' => '#1a7f5a',
        );

        return $presets;
    }
);

Remarques

  • Un argument.
  • Seules les couleurs hexadécimales à six chiffres restent (#1a7f5a) : hexadécimal court, rgb(), hsl(), noms de couleur et hexadécimal avec transparence sont retirés. name est facultatif et reprend la valeur hexadécimale.
  • Il ne change que les sélecteurs, pas les couleurs déjà enregistrées, et n’a aucun effet sur le site public. Les étiquettes d’événements n’ont pas de sélecteur de couleur.
  • Un filtre JavaScript, happenboard.term.colorPresets (@wordpress/hooks), passe après lui. Un tableau vide ici reprend les valeurs par défaut du JavaScript : pour n’afficher aucune pastille, renvoyez un tableau vide depuis le filtre JavaScript.

happenboard_ical_feed_cache_ttl

Filtre Free src/Service/Cache/IcalFeedCache.php

Définit combien de temps le flux iCal du site (GET /happenboard/v1/ical/feed.ics) reste en cache, en secondes. La copie en cache est servie à chaque agenda abonné jusqu’à ce qu’un événement change ou que ce délai expire.

Signature

apply_filters( 'happenboard_ical_feed_cache_ttl', int $ttl )

Paramètres

$ttl int
Par défaut 3600 (une heure).

Valeur de retour

int La durée en secondes. Renvoyez 0 ou moins pour désactiver le cache et construire le flux à chaque requête.

Exemple

add_filter(
    'happenboard_ical_feed_cache_ttl',
    function ( $ttl ) {
        // Une extension modifie les titres à la volée : garder les copies dix minutes au plus.
        return 10 * MINUTE_IN_SECONDS;
    }
);

Remarques

  • Un argument. Il est lu à chaque requête du flux : renvoyez toujours la même valeur.
  • Un délai plus court est rarement utile. Une modification d’événement, de lieu, de catégorie ou des dates d’un événement vide le cache, tout comme un changement de permaliens. La durée ne couvre que ce qu’aucun hook ne signale, comme une extension qui filtre les titres ou les liens.
  • Cache désactivé, le flux envoie toujours un ETag, répond 304 à un If-None-Match correspondant et envoie Cache-Control: public, max-age=300.
  • Seul le flux du site est mis en cache. Le téléchargement d’un événement (GET /happenboard/v1/events/{id}/ical) est construit à chaque requête et ignore ce filtre.

happenboard_schema_disable

Filtre Free src/Service/Schema/EventSchemaPrinter.php

Désactive le JSON-LD Event de HappenBoard pour un événement, par exemple quand une extension SEO affiche le sien. Il s’exécute avant toute construction du balisage : renvoyer true ne coûte rien.

Signature

apply_filters( 'happenboard_schema_disable', bool $disabled, int $post_id )

Paramètres

$disabled bool
Par défaut false.
$post_id int
L’événement affiché.

Valeur de retour

bool true pour ne rien afficher. La valeur est convertie en booléen : la chaîne 'false' désactive donc le balisage.

Exemple

add_filter(
    'happenboard_schema_disable',
    function ( $disabled, $post_id ) {
        // Les événements cochés « sans balisage » dans votre propre boîte méta.
        return $disabled || (bool) get_post_meta( $post_id, '_my_no_event_schema', true );
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2 pour recevoir l’événement, sinon vous ne pouvez désactiver que le site entier.
  • Il s’exécute sur wp_head en priorité 30, sur les pages d’événement uniquement. La route publique GET /happenboard/v1/events/{id}/schema renvoie toujours le balisage.
  • Renvoyer true saute la suite : happenboard_schema_event_type, happenboard_schema_offers, happenboard_event_is_ticketed, happenboard_schema_fallback_currency et happenboard_schema_event ne s’exécutent pas.
  • Inutile pour SEOPress : quand l’événement a un balisage Event réglé dans SEOPress, HappenBoard s’efface déjà.

happenboard_schema_offers

Filtre Free src/Service/Schema/EventSchemaBuilder.php

Filtre les offers du JSON-LD Event, une liste d’entrées schema.org Offer. HappenBoard transmet une liste vide ; HappenBoard Pro ajoute une Offer par billet en vente.

Signature

apply_filters( 'happenboard_schema_offers', array<int,array<string,mixed>> $offers, int $event_id, string $url, Occurrence|null $occurrence )

Paramètres

$offers array<int,array<string,mixed>>
Vide dans HappenBoard. Avec Pro, une Offer par billet en vente.
$event_id int
L’identifiant de l’événement.
$url string
Le permalien de l’événement, à utiliser comme url de chaque Offer.
$occurrence HappenBoard\Service\Recurrence\Occurrence|null
La date que décrit le JSON-LD (celle en cours, sinon la prochaine, sinon la dernière), avec start_utc, end_utc et sequence. Sur un événement récurrent, comptez les places de cette date. null pour un événement sans dates.

Valeur de retour

array<int,array<string,mixed>> Une liste de tableaux Offer. Les entrées qui ne sont pas des tableaux sont retirées, et une valeur qui n’est pas un tableau compte comme vide.

Exemple

add_filter(
    'happenboard_schema_offers',
    function ( $offers, $event_id, $url, $occurrence ) {
        // Des billets vendus ailleurs, avec le prix enregistré sur l'événement.
        $price = (string) get_post_meta( $event_id, '_my_ticket_price', true );
        if ( '' !== $price ) {
            $offers[] = array(
                '@type'         => 'Offer',
                'url'           => $url,
                'price'         => $price,
                'priceCurrency' => 'EUR',
                'availability'  => 'https://schema.org/InStock',
            );
        }

        return $offers;
    },
    10,
    4
);

Remarques

  • Quatre arguments : enregistrez avec 10, 4 pour recevoir la date.
  • HappenBoard Pro s’y branche en priorité 10. Il ajoute une Offer par billet dont la vente est ouverte, dans la devise du billet, avec validFrom et validThrough tirés des dates de vente. Elle passe à SoldOut quand il ne reste aucune place à la date décrite. Complétez $offers au lieu de le remplacer.
  • isAccessibleForFree suit ce que vous renvoyez : false dès qu’une Offer a un price supérieur à 0. Les entrées ne sont pas vérifiées : donnez à chacune un price numérique, un priceCurrency et une availability.
  • Une liste vide ne veut pas toujours dire gratuit : voir happenboard_event_is_ticketed. Pour un Event sans offers, retirez la clé sur happenboard_schema_event.

happenboard_event_is_ticketed

Filtre Free src/Service/Schema/EventSchemaBuilder.php

Filtre si un événement est vendu par billets. Il décide de ce que dit le JSON-LD Event quand happenboard_schema_offers ne renvoie aucune Offer : un événement à billets n’a ni Offer ni isAccessibleForFree, tout autre événement reçoit une Offer gratuite.

Signature

apply_filters( 'happenboard_event_is_ticketed', bool $ticketed, int $event_id )

Paramètres

$ticketed bool
Par défaut false.
$event_id int
L’identifiant de l’événement.

Valeur de retour

bool true quand l’entrée de l’événement se vend par billets, qu’une vente soit ouverte ou non.

Exemple

add_filter(
    'happenboard_event_is_ticketed',
    function ( $ticketed, $event_id ) {
        // Événements vendus sur une billetterie externe.
        if ( '' !== (string) get_post_meta( $event_id, '_my_ticket_url', true ) ) {
            return true;
        }

        return $ticketed;
    },
    10,
    2
);

Remarques

  • Deux arguments : enregistrez avec 10, 2.
  • HappenBoard Pro répond true en priorité 10 pour un événement qui a au moins un billet, payant ou gratuit, en vente ou non. Une vente fermée retire alors les offres au lieu de faire passer l’événement pour gratuit. Gardez un true reçu.
  • Il ne s’exécute que si aucune Offer n’est revenue. L’Offer gratuite qui en découle a un prix de 0, dans la devise de happenboard_schema_fallback_currency, et passe à SoldOut quand la capacité des inscriptions est atteinte.
  • Il s’exécute dans le constructeur du balisage, que la route publique GET /happenboard/v1/events/{id}/schema appelle aussi : ne vous fiez pas aux conditions de page comme is_singular().

happenboard_schema_fallback_currency

Filtre Free src/Service/Schema/EventSchemaBuilder.php

Filtre la devise de l’Offer gratuite qu’un événement reçoit quand il n’a aucune Offer et n’est pas vendu par billets. Sans effet sur les vraies offres.

Signature

apply_filters( 'happenboard_schema_fallback_currency', string $currency )

Paramètres

$currency string
La devise du site : Currency dans HappenBoard → Settings → General, après le filtre happenboard_currency.

Valeur de retour

string Un code ISO 4217 à trois lettres. Il est mis en majuscules, pas vérifié.

Exemple

add_filter(
    'happenboard_schema_fallback_currency',
    function ( $currency ) {
        // Événements gratuits indiqués en francs suisses.
        return 'CHF';
    }
);

Remarques

  • Un argument. La plupart des sites n’ont besoin d’aucun callback : la valeur par défaut suit déjà la devise du site.
  • Il ne s’exécute que si happenboard_schema_offers n’a renvoyé aucune Offer et si happenboard_event_is_ticketed a renvoyé false. L’Offer gratuite a un prix de 0 : la devise ne fait pas passer l’événement pour payant.
  • Un code invalide est affiché tel quel, et les moteurs de recherche rejettent l’Offer.
  • Il s’exécute dans le constructeur du balisage, que la route publique GET /happenboard/v1/events/{id}/schema appelle aussi : ne vous fiez pas aux conditions de page comme is_singular().

Pour aller plus loin