# Traduire le flux RSS d’un site WordPress multilingue sans mélanger les langues

> Un abonné au flux RSS recevait des articles dans toutes les langues confondues. Voici comment filtrer le flux par langue courante sans y toucher davantage.

- Auteur : Clément Hadrot
- Publié le : 2021-08-26
- Mis à jour le : 2021-08-26
- Catégorie : Multilingue
- URL : https://wpmoderne.dev.wordpress-developpement.fr/multilingue/flux-rss-multilingue-filtrer-langue/

## L’essentiel

- Le flux RSS natif de WordPress n'a aucune notion de langue par défaut
- Le hook pre_get_posts permet de filtrer le flux comme n'importe quelle requête
- Chaque langue doit exposer sa propre URL de flux distincte

Un lecteur fidèle d'un blog culinaire bilingue français-anglais s'est plaint, via le formulaire de contact, de recevoir dans son agrégateur RSS des recettes en anglais alors qu'il ne lisait que la version française du site depuis toujours. En creusant, le flux RSS accessible à l'adresse `/feed/` renvoyait effectivement l'ensemble des articles publiés, toutes langues confondues, dans leur ordre chronologique de publication, sans distinction aucune.

Ce comportement est celui par défaut de WordPress : le flux RSS généré nativement n'a aucune connaissance du concept de langue, puisque cette notion est entièrement apportée par l'extension multilingue installée. Sans intervention spécifique, le flux continue donc de se comporter comme sur un site monolingue.

## Comprendre pourquoi le flux échappe au filtre habituel

Sur la plupart des sites utilisant Polylang, la requête principale d'une page de contenu classique est filtrée automatiquement par langue via le hook `pre_get_posts`. Le flux RSS constitue cependant un cas particulier : selon la version de l'extension et sa configuration, ce filtre automatique peut ne pas s'appliquer aux requêtes de type flux, considérées comme un contexte distinct des pages de contenu classiques. Il est donc prudent de ne jamais présumer que le flux hérite du même comportement, et de vérifier explicitement, ou de forcer ce filtrage soi-même pour plus de fiabilité.

## Filtrer le flux avec un hook dédié

La correction la plus robuste consiste à accrocher une fonction sur `pre_get_posts`, en ciblant spécifiquement le contexte du flux avec la fonction conditionnelle `is_feed()`, puis à appliquer le filtre de langue en fonction de la langue détectée dans l'URL du flux demandé :

```
<?php
add_action( 'pre_get_posts', function( $query ) {
    if ( ! is_admin() && $query->is_main_query() && is_feed() ) {
        if ( function_exists( 'pll_current_language' ) ) {
            $query->set( 'lang', pll_current_language() );
        }
    }
} );
```

Ce filtre s'assure que le flux demandé ne renvoie que les articles correspondant à la langue courante détectée par Polylang au moment de la requête, indépendamment du comportement par défaut de l'extension sur ce type de contenu précis.

> L'essentiel à retenir : Le flux RSS natif de WordPress n'a aucune notion de langue par défaut ; Le hook pre_get_posts permet de filtrer le flux comme n'importe quelle requête ; Chaque langue doit exposer sa propre URL de flux distincte

## Exposer une URL de flux distincte par langue

Pour que ce filtre fonctionne correctement, chaque langue doit disposer de sa propre URL de flux accessible, généralement construite selon la même structure que les URL de contenu du site : `exemple.fr/feed/` pour le français et `exemple.fr/en/feed/` pour l'anglais, si le site utilise une structure en sous-dossiers. Polylang gère normalement cette structure d'URL automatiquement dès lors que la structure des permaliens du site inclut le préfixe de langue, sans configuration supplémentaire nécessaire au-delà du filtre `pre_get_posts` ci-dessus.

- Testez chaque URL de flux séparément avec un lecteur RSS ou une simple requête `curl`, jamais uniquement l'URL générique `/feed/`.
- Le lien vers le flux affiché dans le `<head>` de chaque page doit lui aussi pointer vers l'URL de flux correspondant à la langue de la page affichée, pas systématiquement vers le flux générique.
- Un widget d'abonnement RSS visible sur le site doit être adapté pour proposer le bon lien selon la langue courante du visiteur.

### Vérifier avec un outil en ligne de commande

Un test rapide en ligne de commande confirme la correction sans dépendre d'un lecteur RSS tiers susceptible de mettre en cache une ancienne version du flux :

```
curl -s https://exemple.fr/en/feed/ | grep -o '<title>[^<]*</title>'
```

La sortie doit lister exclusivement des titres d'articles en anglais. Si des titres français apparaissent malgré la correction, un plugin de cache servant une version figée du flux est souvent en cause : les flux RSS doivent être exclus de la mise en cache statique, ou leur cache doit expirer suffisamment rapidement pour rester à jour avec les publications récentes.

> Je ne considère jamais un flux multilingue corrigé tant que je n'ai pas testé avec `curl` directement, sans passer par un lecteur RSS qui pourrait masquer un problème de cache persistant côté serveur.

## En résumé

Le flux RSS natif de WordPress ne connaît pas la notion de langue et doit être explicitement filtré via `pre_get_posts` combiné à `is_feed()`, sans présumer qu'il hérite automatiquement du comportement des autres requêtes du site. Une fois ce filtre en place, chaque langue expose sa propre URL de flux cohérente avec la structure de permaliens du site, à tester systématiquement en ligne de commande pour écarter tout problème de cache résiduel.
