# Block Bindings et Brevo : le statut d’abonné newsletter dans un template

> Création d'une source de liaison Block Bindings personnalisée qui interroge l'API Brevo pour afficher un statut d'abonné newsletter, sans bloc dynamique classique.

- Auteur : WordPress Développement
- Publié le : 2024-06-06
- Mis à jour le : 2024-06-06
- Catégorie : Éditeur de site (FSE)
- URL : https://www.wpmoderne.fr/fse/block-bindings-brevo-statut-abonne/

## L’essentiel

- Source de liaison personnalisée enregistrée via register_block_bindings_source
- Statut d'abonné affiché directement dans un bloc paragraphe
- Aucune extension Brevo tierce nécessaire

Comment afficher une donnée provenant d'un service tiers directement dans un bloc paragraphe de l'éditeur, sans écrire un bloc dynamique complet pour un usage aussi ponctuel ? C'est la question posée par un client utilisant Brevo comme plateforme d'emailing, qui souhaitait afficher sur son espace membre le statut d'abonnement à la newsletter de l'utilisateur connecté, directement dans un template composé de blocs natifs.

Ce billet décrit la création d'une source de liaison Block Bindings personnalisée, disponible via son API publique depuis WordPress 6.5, qui interroge l'API Brevo pour renseigner cette donnée. La configuration des campagnes Brevo et les automatisations marketing associées ne sont pas traitées ici, ce billet se concentrant sur l'affichage du statut dans l'éditeur de site.

## Pourquoi Block Bindings plutôt qu'un bloc dynamique

Un bloc dynamique classique aurait fonctionné, mais aurait nécessité l'enregistrement d'un bloc complet côté JavaScript et PHP pour un besoin très limité : afficher une simple phrase dans un paragraphe existant. L'API Block Bindings, stabilisée dans WordPress 6.5, permet de connecter un attribut de bloc natif, ici le contenu d'un paragraphe, à une source de donnée dynamique enregistrée côté PHP, sans créer de nouveau type de bloc.

Cette approche garde l'expérience d'édition proche du natif : le développeur insère un simple bloc `core/paragraph`, puis le lie à la source personnalisée depuis le panneau latéral de l'éditeur.

## Enregistrer la source de liaison

La source est enregistrée via la fonction `register_block_bindings_source()`, introduite avec l'API publique de Block Bindings, avec un callback qui interroge l'API Brevo pour l'utilisateur actuellement connecté.

> L'essentiel à retenir : Source de liaison personnalisée enregistrée via register_block_bindings_source ; Statut d'abonné affiché directement dans un bloc paragraphe ; Aucune extension Brevo tierce nécessaire

```
add_action( 'init', function() {
    register_block_bindings_source( 'wpm/statut-brevo', array(
        'label'              => __( 'Statut abonné Brevo', 'wpm' ),
        'get_value_callback' => 'wpm_get_statut_brevo',
    ) );
} );

function wpm_get_statut_brevo( $source_args, $block_instance ) {
    $user = wp_get_current_user();
    if ( ! $user->exists() ) {
        return __( 'Non connecté', 'wpm' );
    }

    $cache_key = 'wpm_brevo_statut_' . $user->ID;
    $statut    = get_transient( $cache_key );

    if ( false === $statut ) {
        $statut = wpm_interroger_api_brevo( $user->user_email );
        set_transient( $cache_key, $statut, 10 * MINUTE_IN_SECONDS );
    }

    return $statut;
}
```

## Lier le bloc paragraphe depuis l'éditeur

Une fois la source enregistrée, elle apparaît automatiquement dans le menu de liaison accessible depuis les trois points du bloc paragraphe sélectionné dans l'éditeur, à condition que le thème déclare le support des Block Bindings sur ce bloc via son `block.json` ou un filtre approprié. Le développeur choisit alors « Statut abonné Brevo » dans la liste des sources disponibles, et le contenu du paragraphe devient en lecture seule dans l'éditeur, remplacé à l'affichage par la valeur retournée par le callback.

### Interroger l'API Brevo

La fonction `wpm_interroger_api_brevo()` appelle l'endpoint `GET /v3/contacts/{identifiant}` de l'API Brevo avec la clé d'API du compte, et lit le champ `emailBlacklisted` de la réponse pour déterminer si le contact est toujours abonné ou s'est désinscrit.

```
function wpm_interroger_api_brevo( $email ) {
    $reponse = wp_remote_get(
        'https://api.brevo.com/v3/contacts/' . rawurlencode( $email ),
        array( 'headers' => array( 'api-key' => WPM_BREVO_API_KEY ) )
    );

    if ( is_wp_error( $reponse ) ) {
        return __( 'Statut indisponible', 'wpm' );
    }

    $corps = json_decode( wp_remote_retrieve_body( $reponse ), true );
    return empty( $corps['emailBlacklisted'] )
        ? __( 'Abonné à la newsletter', 'wpm' )
        : __( 'Désabonné de la newsletter', 'wpm' );
}
```

## Ce que cette approche apporte

- Le développeur qui reprendra ce site plus tard trouvera un bloc paragraphe standard dans l'éditeur, avec une source de liaison clairement identifiée, plus lisible qu'un bloc dynamique personnalisé sans documentation.
- La mise en cache via `transient`, dix minutes ici, évite de solliciter l'API Brevo à chaque affichage de page pour un utilisateur donné, un point important pour respecter les limites de taux de l'API.
- Cette source de liaison reste réutilisable sur n'importe quel bloc supportant les liaisons, pas seulement le paragraphe initialement prévu.

> Une source de liaison bien nommée documente elle-même son usage dans l'éditeur, un avantage souvent négligé face au bloc dynamique classique.

## En résumé

L'API Block Bindings ouvre une voie légère pour connecter des blocs natifs à des données externes, sans la lourdeur d'un bloc dynamique complet, particulièrement adaptée aux besoins ponctuels comme celui-ci. Sa contrepartie reste une certaine discrétion dans l'éditeur : un développeur non averti de son existence pourrait ne pas comprendre immédiatement pourquoi un paragraphe affiche un contenu qu'il ne peut pas modifier directement.
