Exclure les articles épinglés de la boucle de WordPress

10 commentaires
Exclure les articles épinglés de la boucle de WordPress
Les articles épinglés - sticky posts en anglais, permettent de conserver vos articles importants en tête de liste dans la boucle de WordPress.

Très pratique pour la page d’accueil, cette fonctionnalité n’a que peu d’intérêt pour les pages d’archives d’autant plus si de nombreux billets sont marqués comme épinglés.

J’ai récemment eu à appliquer cette technique pour un blog utilisant le thème Twenty Eleven. Les pages d’archives de catégories reprenaient une bonne demi-douzaine d’articles présents dans le slider de la page d’accueil. Inintéressant pour le visiteur qui souhaite obtenir les derniers articles d’une catégorie spécifique.

function wpc_ignore_sticky($query) {
if (! is_admin()) {
if (is_home() && $query->is_main_query()) {
$query->set('ignore_sticky_posts', true);
$query->set('post__not_in', get_option('sticky_posts'));
}
}
}
add_action('pre_get_posts', 'wpc_ignore_sticky');

Sauvegardez le fichier modifié puis ouvrez une page d’archive de catégorie. Les billets épinglés n’apparaissent plus en tête d’affiche et l’ordre anté-chronologique est respecté.

Une astuce similaire existe pour exclure une catégorie de la boucle de WordPress, lisez-le !

Par Aurélien Denis

Consultant & Développeur WordPress / WooCommerce. Un site à créer, à maintenir ou à débuguer ? Contactez-moi.

10 commentaires
  1. nZAngel

    en fait j’ai trouvé.
    il faut mettre paged à la place de page, l’argument à du changer dans les dernières version de wordpress.

  2. nZAngel

    Bonjour, je viens de tester ce bout de code qui marche plutôt bien sauf lorsque je change de page. Il ne m’affiche pas la page suivante mais toujours la même page :
    http://www.rollver.fr/v4

    vous pouvez m’aider ?

  3. Jeremy

    Bonjour,

    comment faire pour n’exclure qu’un seul article d’une boucle ?

  4. GeekPress

    Je viens de tester l’astuce et ça ne fonctionne pas !

    J’ai pourtant bien un article mis en avant et le code ci-dessous avant ma loop :
    $args = array( ‘ignore_sticky_posts’ => 1);
    query_posts( $args );

    Le ignore_sticky_posts n’a pas l’air de fonctionner ^^

    1. Aurélien Denis auteur de l’article

      Tu as repris tout le code ou juste une partie ? Parce que je l’ai utilisé sur un site en production et cela fonctionne super bien…

  5. GeekPress

    Je ne connaissais pas le ignored_sticky_post, joli trouvaille !

    Petit oubli : $sticky = get_option( ‘sticky_posts’ );

    Cette variable est déclarée, mais pas utilisée après. Il faudrait la supprimer du coup 🙂

  6. Nicolas

    Bonjour,
    merci pour cette article.
    J’utilise le plugin yet another featured post. Quand je mets un article en avant, j’ai un doublon du coup. Est ce que cette technique fonctionne aussi pour ce plugin ?

    Merci

    1. Aurélien Denis auteur de l’article

      Hum peut-être que le plugin dispose d’une option d’exclusion. Sinon oui il est possible de modifier le plugin et voir ce qu’il est possible de faire… cela dit, l’astuce présentée ici concerne le thème de WordPress. 😉

  7. Julio Potier (BoiteAWeb)

    Même remarque que l’article précédent, ici tu recrées une loop alors qu’il suffit de modifier la loop en cours.
    La solution a été postée dans l’article précédént, dans les commz.
    Regarde du côté de “pre_get_posts”

    1. Aurélien Denis auteur de l’article

      Yep mais j’ai pas testé… 🙂

Laisser un commentaire