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.

N.B : ce code a été modifié en date du 29/12/2014 pour utiliser la fonction pre_get_posts plus efficace dans notre cas.

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_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 !

Crédits photos : telomi

10 commentaires

  1. 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 »

  2. 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.

  3. 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

  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

Laisser un commentaire

Thèmes & Plugins
Premium By WP Channel

WP Alacarte propose des produits et services de qualité
made in France pour la plateforme WordPress.

Tout est prêt pour créer votre site à la carte !

  • Thèmes et extensions premium
  • Facilité d’utilisation garantie
  • Temps de chargement optimisé
  • Personnalisation avancée
Découvrir

Rejoignez la communauté WordPress !

Faites partie de l’aventure en devenant membre d’une association WordPress. Conférences, ateliers, BarCamp, WordCamp… Venez
partager votre passion pour WordPress !

Aurélien DENIS,
président des associations WordPress Francophone et WPMX