Comment éviter que les featured posts restent en haut des derniers articles

Les featured posts (ou sticky posts) sont utilisés sur WordPress afin de mettre en avant certains articles sur votre site ou sur votre blog. Cependant par défaut les articles mis en avant le sont également dans l’affichage des derniers articles ou ils restent en haut de votre liste. Voyons comment éviter cela afin d’afficher les featured posts dans l’ordre de publication traditionnel et donc d’afficher ceux-ci à des endroits bien spécifiques via un bout de code ou un plugin.

Comment conserver l’ordre d’affichage des articles avec les articles mis en avant ?

Lorsque vous afficher les articles les plus récents de votre blog, vous ne souhaitez pas que les articles mis en avant restent figés dans le haut de votre liste ? C’est très simple, voyons comment modifier votre wp_query pour y arriver, et que les articles mis en avant reprennent leur position initiale à savoir à la date de leur publication. 

Commencez par identifier la boucle (loop) à modifier et adaptez la pour inclure le paramètre ‘ignore_sticky_posts’ => 1

Exemple :

1
2
3
4
5
6
7
8
<?php
$args = array(
	'posts_per_page' => 10,
	'ignore_sticky_posts' => 1
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
?>

Ce bout de code ignore simplement si un article à été mis en avant et affiche vos derniers articles par ordre chronologique classique.

Maintenant si vous voulez aller plus loin dans la démarche. A savoir exclure totalement les posts mis en avant de votre boucle affichant les derniers articles, cela est possible. (Par exemple parce que vous affichez uniquement les articles mis en avant dans un bloc parallèle), il faudra alors ajouter un autre paramètre (on oublie le précédent) de type : ‘post__not_in’ => get_option( ‘sticky_posts’

Exemple : 

1
2
3
4
<?php
$the_query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
?>

Ce bout de code ignorera totalement vos articles mis en avant.