vendredi 25 septembre 2026

À propos

Contact

Tips

Personnaliser le flux RSS de WordPress : images, contenus et exclusions

Un flux RSS sans image mise en avant, avec les communiqués internes mélangés aux vrais articles : le flux par défaut demande souvent quelques ajustements.

Par Clément Hadrot • 14 décembre 2022 • 4 min de lecture • Aucun commentaire
Personnaliser le flux RSS de WordPress : images, contenus et exclusions

Un partenaire média qui agrège des flux RSS pour sa propre plateforme m’a signalé que les articles d’un client n’affichaient jamais d’image, alors que chacun possédait pourtant une image mise en avant soignée. Le flux RSS natif de WordPress, généré automatiquement, n’inclut par défaut ni image mise en avant ni distinction entre les différentes catégories de contenu qu’un site peut publier.

Cet article couvre l’enrichissement du flux avec l’image mise en avant, l’exclusion de certaines catégories, et la création d’un flux personnalisé entièrement séparé ; les questions de référencement liées aux flux RSS ne sont pas abordées ici.

Ajouter l’image mise en avant avec rss2_item

Le hook rss2_item se déclenche à la construction de chaque entrée du flux RSS2 (le format utilisé par défaut par WordPress). Il permet d’y injecter du balisage XML supplémentaire, notamment une balise enclosure pointant vers l’image mise en avant.

function media_ajouter_image_flux_rss() {
    if ( ! has_post_thumbnail() ) {
        return;
    }
    $id_image = get_post_thumbnail_id();
    $url = wp_get_attachment_image_url( $id_image, 'large' );
    $fichier = get_attached_file( $id_image );
    $taille = $fichier ? filesize( $fichier ) : 0;
    $type_mime = get_post_mime_type( $id_image );

    printf(
        '<enclosure url="%s" length="%d" type="%s" />',
        esc_url( $url ),
        (int) $taille,
        esc_attr( $type_mime )
    );
}
add_action( 'rss2_item', 'media_ajouter_image_flux_rss' );

La balise enclosure est le format standard reconnu par la plupart des lecteurs et agrégateurs RSS pour associer un média à une entrée, avec sa taille en octets et son type MIME déclarés explicitement.

Exclure des catégories du flux principal

L'essentiel à retenir : rss2_item ajoute l'image mise en avant à chaque entrée ; pre_get_posts exclut des catégories du flux principal ; add_feed crée un flux entièrement séparé

Sur un site qui publie aussi bien des articles de fond que des communiqués internes destinés uniquement à l’intranet, le flux RSS public ne doit afficher que les premiers. Le hook pre_get_posts, appliqué spécifiquement au contexte de flux, permet cette exclusion sans toucher à l’affichage du site lui-même.

function media_exclure_categorie_du_flux( $query ) {
    if ( $query->is_feed() && $query->is_main_query() ) {
        $query->set( 'category__not_in', array( get_cat_ID( 'communiques-internes' ) ) );
    }
}
add_action( 'pre_get_posts', 'media_exclure_categorie_du_flux' );

Ajouter le contenu complet plutôt que l’extrait

Par défaut, WordPress affiche l’extrait dans le flux RSS plutôt que le contenu complet, un réglage modifiable depuis Réglages > Lecture (« Extrait » ou « Texte intégral »). Pour un contrôle plus fin, le filtre the_content_feed permet d’ajuster le contenu spécifiquement pour le flux, indépendamment de l’affichage sur le site.

function media_contenu_complet_flux( $contenu ) {
    return apply_filters( 'the_content', get_the_content() );
}
add_filter( 'the_excerpt_rss', 'media_contenu_complet_flux' );

Créer un flux entièrement séparé avec add_feed

Pour le partenaire média cité en introduction, la solution la plus propre a finalement été un flux dédié, distinct du flux principal, réservé aux articles de fond et enrichi différemment. La fonction add_feed() déclare ce nouveau point d’accès.

function media_declarer_flux_partenaire() {
    add_feed( 'partenaire', 'media_generer_flux_partenaire' );
}
add_action( 'init', 'media_declarer_flux_partenaire' );

function media_generer_flux_partenaire() {
    query_posts( array(
        'post_type' => 'post',
        'category_name' => 'articles-de-fond',
        'posts_per_page' => 20,
    ) );
    load_template( ABSPATH . WPINC . '/feed-rss2.php' );
}

Une fois déclaré, ce flux devient accessible à l’adresse /feed/partenaire/, après un vidage du cache de permaliens (flush_rewrite_rules(), à exécuter une seule fois, jamais à chaque chargement).

Vérifier la validité XML du flux

  • Tout caractère spécial dans le contenu doit rester correctement échappé : WordPress s’en charge nativement via les fonctions de template dédiées au flux, à condition de ne pas les contourner par une concaténation brute.
  • Valider le flux produit avec un validateur XML/RSS avant de le transmettre à un partenaire externe.
  • Vérifier que la balise enclosure ajoutée ne casse pas la structure si l’image mise en avant est absente sur certains articles — d’où le test has_post_thumbnail() en tout début de fonction.

Avant de livrer un flux personnalisé à un partenaire externe, je le teste systématiquement dans un vrai agrégateur, pas seulement avec un validateur XML : certains lecteurs se montrent bien plus stricts que la norme elle-même sur l’ordre des balises.

En résumé

rss2_item pour enrichir chaque entrée d’une image, pre_get_posts pour exclure certaines catégories du flux principal, et add_feed() pour créer un flux entièrement séparé : ces trois leviers couvrent la quasi-totalité des demandes de personnalisation qui reviennent sur des projets éditoriaux avec des besoins de diffusion externe.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi