web-dev-qa-db-fra.com

Exclure la catégorie de la boucle ne fonctionne pas

J'ai ce code dans mon fichier index.php. J'ai un modèle différent pour une page d'accueil statique, c'est la page du blog. J'essaie d'exclure tous les messages de la catégorie "nouveau", qui correspond à tag_id "13".

<?php query_posts($query_string . '&cat=-13'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><p class='lead'><?php the_title(); ?></p></a>

<p><?php the_excerpt(); ?> <a href="<?php the_permalink()?>">read in full</a></p>

<p class='muted'><small>Written by: <?php the_author_posts_link(); ?><br>               
            <?php the_time('F jS, Y') ?></small></p><hr>

<?php endwhile; ?>

Des idées pourquoi cela ne fonctionne pas?

2
matt

N'utilisez pas query_posts(). Utilisez pre_get_posts à la place:

function wpse82745_filter_pre_get_posts( $query ) {
    // Only modify the main loop,
    // and only in the blog posts index
    if ( is_home() && $query->is_main_query() ) {
        $query->set( 'category__not_in', array( '13' ) );
    }
}
add_action( 'pre_get_post', 'wpse82745_filter_pre_get_posts' );

Ce rappel exclura la catégorie 13 de la boucle principale de l'index des articles de blog.

1
Chip Bennett

Le $query_string n'est probablement pas initialisé ni déclaré en tant que variable globale. Essayez d'ajouter

<?php global $query_string; ?>

avant votre code

0
Mark Kaplun

Je rencontrais exactement le même problème mystérieux, mais j'avais du mal à le résoudre. J'ai essayé toutes les suggestions dans les commentaires ici mais rien ne semblait fonctionner.

Finalement, comme la clé était de conserver la pagination (comme c'était sur la section principale du blog du site et que je voulais exclure "Autres nouvelles"), j'ai essayé ceci:

//  Exclude the Other News category

$otherNews = get_category_by_slug('other-news'); 
$excludeID = $otherNews->term_id;

//query_posts($query_string . '&cat=-' . $excludeID);   <-- Doesn't work for some reason

$args = array('cat' => '-' . $excludeID, 'paged' => $paged );
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts($args);

... et cela semblait fonctionner parfaitement.

0
indextwo