Afficher des articles relatifs sous WordPress, avec ou sans extension

Mis à jour le :

Proposer des articles relatifs en fin de lecture retient vos visiteurs et renforce le maillage interne de votre site. Avec un thème à blocs, WordPress sait le faire sans extension : le bloc Boucle de requête et quelques lignes de PHP suffisent.

Ce tutoriel présente trois méthodes : le bloc Boucle de requête filtré par catégorie, la sélection manuelle des articles pour guider votre maillage interne et les extensions maintenues pour les thèmes classiques ou les suggestions fondées sur le contenu.

Pourquoi afficher des articles relatifs ?

  • Expérience de lecture : le visiteur trouve la suite logique de sa lecture sans passer par le moteur de recherche du site ;
  • Pages vues : un lecteur qui clique sur un article relatif reste sur votre site au lieu de repartir vers les résultats de Google ;
  • Maillage interne : chaque bloc d’articles relatifs ajoute des liens internes, qui aident les moteurs de recherche à comprendre la structure de votre site et à redécouvrir vos anciens contenus.

Pour le référencement, la pertinence des liens compte plus que leur nombre : un lien vers un article vraiment proche vaut mieux que trois liens tirés au hasard.

Méthode 1 : le bloc Boucle de requête, sans extension

Avec un thème à blocs, ouvrez Apparence > Éditeur > Modèles, puis le modèle des articles (« Publications seules » dans les thèmes par défaut). Sous le contenu, ajoutez un bloc Boucle de requête et choisissez une mise en page : titre, image mise en avant, extrait…

Dans les réglages du bloc, passez le Type de requête sur Personnalisée, sans quoi le bloc reprend la requête du modèle, c’est-à-dire l’article affiché. Réglez ensuite le nombre d’Éléments par page, 3 par exemple et laissez les Filtres vides.

Tel quel, le bloc affiche vos derniers articles, sans rapport avec celui qui est lu. Pour le rendre contextuel, sélectionnez le bloc Modèle de publication qu’il contient et saisissez related-posts dans l’onglet Avancé, champ Classe(s) CSS additionnelle(s). Ajoutez enfin ce filtre dans le fichier functions.php de votre thème enfant ou dans une extension de fonctionnalités :

/* Articles relatifs : derniers articles de la même catégorie */
function wpc_related_posts_query( $query, $block ) {
	$class = $block->parsed_block['attrs']['className'] ?? '';

	if ( ! is_singular( 'post' ) || ! str_contains( $class, 'related-posts' ) ) {
		return $query;
	}

	$post_id = get_queried_object_id();

	$query['category__in'] = wp_get_post_categories( $post_id );
	$query['post__not_in'] = [ $post_id ];
	$query['orderby']      = 'date';
	$query['order']        = 'DESC';

	return $query;
}

add_filter( 'query_loop_block_query_vars', 'wpc_related_posts_query', 10, 2 );

Le filtre query_loop_block_query_vars modifie la requête de chaque bloc Boucle de requête avant son exécution. La classe related-posts sert de repère : seules les boucles qui la portent sont concernées et vous pouvez vous en servir pour les mettre en forme dans votre CSS.

Le code affiche les derniers articles des mêmes catégories. Évitez le tri aléatoire ('orderby' => 'rand') souvent proposé : il coûte cher à la base de données sur un gros site et, avec un cache de page, la sélection reste de toute façon figée jusqu’à la prochaine purge.

Avec un thème classique, le bloc Boucle de requête fonctionne aussi dans le contenu d’un article, mais il faut alors l’insérer dans chaque article : une extension (méthode 3) sera plus pratique.

Méthode 2 : choisir les articles relatifs à la main

Le filtre par catégorie choisit à votre place. Pour votre maillage interne, vous voudrez parfois imposer un lien : un guide complet sous un article d’actualité, l’épisode suivant d’une série, une page que vous voulez faire remonter. Un champ personnalisé suffit pour enregistrer ce choix, sans extension.

Dans l’éditeur d’articles, ouvrez le menu Options (les trois points en haut à droite), puis Préférences > Général. Activez Champs personnalisés dans la section Avancé et cliquez sur Afficher et recharger la page. Sous le contenu, la boîte Champs personnalisés apparaît : cliquez sur Saisissez-en un nouveau, nommez le champ related_posts et indiquez en valeur les identifiants des articles à mettre en avant, séparés par des virgules, dans l’ordre voulu : 1234, 567.

Remplacez ensuite le filtre de la méthode 1 par celui-ci :

/* Articles relatifs : sélection manuelle, complétée par la même catégorie */
function wpc_related_posts_query( $query, $block ) {
	$class = $block->parsed_block['attrs']['className'] ?? '';

	if ( ! is_singular( 'post' ) || ! str_contains( $class, 'related-posts' ) ) {
		return $query;
	}

	$post_id = get_queried_object_id();
	$count   = (int) ( $query['posts_per_page'] ?? 3 );

	// Articles saisis dans le champ related_posts, dans l'ordre et s'ils sont publiés
	$manual   = array_diff( wp_parse_id_list( get_post_meta( $post_id, 'related_posts', true ) ), [ $post_id ] );
	$post_ids = $manual ? get_posts( [ 'fields' => 'ids', 'post__in' => $manual, 'orderby' => 'post__in', 'posts_per_page' => $count ] ) : [];

	// Places restantes : derniers articles de la même catégorie
	if ( count( $post_ids ) < $count ) {
		$post_ids = array_merge(
			$post_ids,
			get_posts(
				[
					'fields'         => 'ids',
					'category__in'   => wp_get_post_categories( $post_id ),
					'post__not_in'   => array_merge( $post_ids, [ $post_id ] ),
					'posts_per_page' => $count - count( $post_ids ),
				]
			)
		);
	}

	$query['post__in'] = $post_ids ?: [ 0 ];
	$query['orderby']  = 'post__in';

	return $query;
}

add_filter( 'query_loop_block_query_vars', 'wpc_related_posts_query', 10, 2 );

Les articles saisis passent en premier, dans l’ordre choisi. Un article dépublié ou supprimé depuis est simplement ignoré et les places restantes sont complétées par les derniers articles des mêmes catégories. Sans champ, le bloc se comporte comme avec la méthode 1.

C’est ce mécanisme qui alimente les articles relatifs en bas de cette page : sur WP channel, un panneau dans la barre latérale de l’éditeur remplace simplement le champ personnalisé.

Pour une boucle placée dans le contenu d’un seul article, l’extension Query Loop Post Selector permet de choisir les contenus directement dans le bloc. Dans un modèle, en revanche, cette sélection serait la même sous tous vos articles : le champ personnalisé reste la bonne solution.

Et pour des produits WooCommerce ?

Inutile de coder : WooCommerce affiche nativement des Produits similaires, choisis parmi les mêmes catégories et étiquettes de produits. Pour la sélection manuelle, ouvrez l’onglet Produits liés de la fiche produit et renseignez les Produits suggérés, qui s’affichent sur la fiche, ou les Ventes croisées, proposées dans le panier.

Méthode 3 : les extensions maintenues

Avec un thème classique, ou si vous préférez des suggestions fondées sur le texte des articles plutôt que sur les catégories, une extension prend le relais. Celles-ci sont maintenues et compatibles avec WordPress 7.1 selon leurs fiches officielles (septembre 2026) :

  • Contextual Related Posts : compare le titre et le contenu des articles, avec en option les catégories, les étiquettes ou des champs personnalisés. Affichage automatique après le contenu, bloc, widget ou code court et mise en cache des résultats ;
  • Related Posts for WordPress : calcule les liens une fois pour toutes depuis l’administration, puis vous laisse corriger à la main les articles reliés à chaque publication ;
  • Related Posts by Taxonomy : classe les articles selon le nombre de catégories et d’étiquettes partagées, affichés par widget, code court ou gabarit de votre thème ;
  • Jetpack : son module Articles similaires analyse vos contenus sur les serveurs de WordPress.com, ce qui suppose de connecter votre site à un compte WordPress.com.

YARPP (Yet Another Related Posts Plugin), longtemps la référence, compte encore de nombreuses installations, mais sa dernière mise à jour date de novembre 2024 et elle n’a pas été testée au-delà de WordPress 6.7.

Cet article présentait à l’origine Gutty Related Posts, une extension que j’avais co-développée à l’époque de GuttyPress. Elle a été fermée sur le répertoire officiel le 25 janvier 2026, à la demande de ses auteurs et n’est plus téléchargeable.

Si elle est encore installée sur votre site, désactivez-la puis supprimez-la. Sa désinstallation laisse deux traces dans la base de données : sa table de mots-clés et l’option de ses réglages. Avec WP-CLI, depuis le dossier de votre site :

wp db query "DROP TABLE IF EXISTS $(wp db prefix)gutty_related_posts_keywords"
wp option delete guttyrelatedposts_settings

Sans WP-CLI, supprimez depuis phpMyAdmin la table wp_gutty_related_posts_keywords (le préfixe wp_ peut être différent chez vous) et la ligne guttyrelatedposts_settings de la table wp_options, après une sauvegarde.

Le bloc qu’elle ajoutait était une variante du bloc Boucle de requête : il continue de s’afficher sans l’extension, mais présente désormais vos derniers articles. Ajoutez la classe related-posts à son Modèle de publication et le filtre de la méthode 1 ou 2 pour lui rendre son rôle. Si vous utilisiez son code court, retirez-le : sans l’extension, il s’affiche tel quel dans la page.

En résumé

Avec un thème à blocs, le bloc Boucle de requête et un filtre de quelques lignes suffisent pour afficher des articles relatifs pertinents, sans extension ni table supplémentaire dans la base de données. Ajoutez une sélection manuelle pour diriger votre maillage interne vers vos contenus clés et gardez les extensions pour les thèmes classiques ou les suggestions fondées sur le texte.

Avatar de Aurélien Denis

Protégez votre site WordPress

Vos données sont précieuses,
ne prenez pas le risque de tout perdre.
Confiez-moi votre maintenance !

Ces articles devraient t’intéresser…

  • DeepL et Polylang : traduire automatiquement votre site WordPress

    DeepL et Polylang : traduire automatiquement votre site WordPress

    Polylang Pro, l’extension multilingue de référence pour WordPress, intègre DeepL comme outil de traduction automatique depuis sa version 3.6, sortie en mars 2024. Une approche hybride combinant une gestion manuelle des traductions tout en opérant une traduction préalable via la machine : sans doute la combinaison ultime alliant qualité et réduction des coûts.

  • Générer des balises alt en masse avec ChatGPT et SEOPress

    Générer des balises alt en masse avec ChatGPT et SEOPress

    Les balises alt sont très importantes pour le référencement et l’accessibilité de votre site Web, mais les ajouter une par une peut être un travail fastidieux. C’est là qu’interviennent SEOPress, un plugin puissant pour l’ optimisation SEO sur WordPress et ChatGPT, une intelligence artificielle de génération de texte. Voici comment utiliser ces outils pour générer…

  • Filtrer l’icône de menu mobile du bloc navigation de Gutenberg

    Filtrer l’icône de menu mobile du bloc navigation de Gutenberg

    L’éditeur de blocs présent depuis la phase 1 du projet Gutenberg embarque un bloc navigation capable de se replier automatiquement lors du passage en résolution mobile. Aucun réglage ne permet à ce jour de le modifier depuis l’éditeur, voici une astuce par le code.

4 réponses

  1. Avatar de Li-An
    Li-An

    OK, je vais suivre ça. L’ajout automatique pour les thèmes classiques est quand même plus évident à gérer pour la plupart des gens.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      La fonctionnalité est à présent disponible dans la dernière version.

  2. Avatar de Li-An
    Li-An

    Le fait que les billets relatifs ne puissent pas être affichés automatiquement sous le contenu via les options est un vrai moins pour les thèmes classiques. Pas de problème avec Blocksy Pro et ses hooks mais contraignant pour l’utilisateur lambda.
    Et rien sur l’affichage ? J’imagine que le bloc propose des options mais même pas une capture d’écran pour montrer le résultat. Bon, je vais tester pour voir s’il fait mieux que mon extension actuelle.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Je viens de rajouter des captures d’écran, nous étions en train de finaliser une mise à jour.

      L’extension fonctionne quel que soit le thème, classique ou FSE. L’affichage automatique est déjà développé, nous attendons des retours pour l’intégrer lors d’une prochaine mise à jour.

      Pour les thèmes FSE, nous utilisons les blocs natifs ce qui permet de créer des boucles personnalisées avec les blocs souhaités comme un titre, une image mise en avant, un extrait, etc. Pour les autres, nous embarquons un minimum de CSS et quelques options de réglages.

      Voilà pour cette première version !