Un rédacteur en chef de titre local qui demande « peut-on afficher la météo du jour sans payer un service tiers ? » obtient en général la même réponse : oui, à condition d’accepter une donnée simple et de la mettre à jour à un rythme raisonnable. C’est exactement le cahier des charges qu’on va suivre ici, avec un bloc dynamique qui interroge une API météo publique et gratuite, sans clé payante ni abonnement mensuel.
Le choix se porte sur Open-Meteo, une API ouverte qui ne nécessite pas de clé d’authentification pour une consultation raisonnable, ce qui convient parfaitement à un usage éditorial : quelques dizaines d’affichages par jour, pas un service de prévision professionnel.
Créer le bloc dynamique
Le bloc s’enregistre classiquement via son fichier block.json, avec un rendu confié à PHP plutôt qu’à un rendu React côté client, pour éviter tout scintillement à l’affichage :
{
"apiVersion": 3,
"name": "titre-local/meteo-du-jour",
"title": "Météo du jour",
"category": "widgets",
"attributes": {
"latitude": { "type": "number", "default": 48.117 },
"longitude": { "type": "number", "default": -1.677 },
"villeAffichee": { "type": "string", "default": "Rennes" }
},
"render": "file:./render.php"
}
Le fichier render.php reçoit les attributs du bloc et se charge d’appeler l’API, puis de construire le balisage final. Rien n’est envoyé au navigateur avant que la donnée ne soit prête.
Interroger l’API sans clé et sans dépendance
La fonction wp_remote_get du cœur de WordPress suffit largement, sans bibliothèque tierce à installer :
function titre_local_recuperer_meteo( $latitude, $longitude ) {
$transient_key = 'titre_local_meteo_' . md5( $latitude . $longitude );
$donnees = get_transient( $transient_key );
if ( false !== $donnees ) {
return $donnees;
}
$url = add_query_arg(
array(
'latitude' => $latitude,
'longitude' => $longitude,
'current_weather' => 'true',
),
'https://api.open-meteo.com/v1/forecast'
);
$reponse = wp_remote_get( $url, array( 'timeout' => 5 ) );
if ( is_wp_error( $reponse ) ) {
return null;
}
$corps = json_decode( wp_remote_retrieve_body( $reponse ), true );
set_transient( $transient_key, $corps, 30 * MINUTE_IN_SECONDS );
return $corps;
}

Construire le rendu côté serveur
Le fichier render.php exploite ensuite ce résultat pour composer un balisage minimal, sans dépendance à une bibliothèque graphique externe :
<?php
$attributs = $attributes;
$meteo = titre_local_recuperer_meteo( $attributs['latitude'], $attributs['longitude'] );
if ( ! $meteo || empty( $meteo['current_weather'] ) ) {
return;
}
$temperature = round( $meteo['current_weather']['temperature'] );
?>
<div <?php echo get_block_wrapper_attributes(); ?>>
<p>Météo à <?php echo esc_html( $attributs['villeAffichee'] ); ?> : <?php echo esc_html( $temperature ); ?> °C</p>
</div>
La fonction get_block_wrapper_attributes() garantit que les classes et l’identifiant attendus par l’éditeur sont bien présents, sans avoir à les recopier à la main.
Limiter les appels sans service payant
Le set_transient posé plus haut joue un rôle précis : il évite qu’une page consultée plusieurs centaines de fois par jour ne déclenche autant d’appels vers l’API externe. Une durée de trente minutes est largement suffisante pour une météo affichée en page d’accueil d’un site d’actualités locales, la donnée n’ayant pas besoin d’être mise à jour à la minute près.
- Un appel toutes les trente minutes maximum, quel que soit le trafic du site ;
- Aucune clé d’API à renouveler ni à surveiller ;
- Un comportement dégradé propre : si l’API ne répond pas, le bloc ne s’affiche simplement pas, plutôt que d’afficher une erreur visible des lecteurs.
Les limites à connaître avant de généraliser
Ce montage convient à un affichage éditorial ponctuel, pas à un service météo à part entière. Open-Meteo reste une API à vocation ouverte et ne garantit pas de niveau de service contractuel ; pour un usage à fort trafic ou une exigence de disponibilité stricte, il faudrait revoir la question d’un abonnement payant, ce qui sort du périmètre d’un simple bloc éditorial pour un titre local.
Le budget d’un titre de presse locale ne justifie pas toujours un abonnement API : une donnée simple, mise en cache intelligemment, répond souvent à l’attente réelle du lecteur.
Pour aller plus loin
Ce bloc peut évoluer vers un affichage à plusieurs villes, ou vers une icône représentant les conditions du jour à partir du code retourné par l’API. L’essentiel reste la même discipline : un appel espacé dans le temps, un rendu côté serveur, et une dégradation silencieuse en cas d’indisponibilité du service externe.