web-dev-qa-db-fra.com

Comment exclure les publications d'une catégorie lorsque vous utilisez ce format particulier

J'essaie d'exclure les messages d'une certaine catégorie de ceux affichés sur mon home.php.

Le code qui est dans mon thème est le suivant:

query_posts(array('post__not_in' => $featured_posts_array));
                if (have_posts()) :
                    while (have_posts()) : the_post(); ?>
                        <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
                            <div class="categories">
                                <h3><?php the_categories_excerpt(); ?></h3>

J'ai essayé d'ajouter ce qui suit avant le query_posts (fonction mais cela ne fait rien.

function exclude_category( $query ) {
    if ( is_feed() ) {
        $query = set_query_var( 'cat', '-1' );  
    }

    return $query;
}

add_filter( 'pre_get_posts', 'exclude_category' );

Y a-t-il un type de format que je dois suivre?

1
Sledge81

Premièrement, n'utilisez pas query_posts(). Juste se débarrasser de l'appel entièrement. Ça va casser des choses.

Seconde:

J'ai essayé d'ajouter ce qui suit avant le query_posts (fonction mais cela ne fait rien.

Les rappels et les appels add_action() appartiennent à functions.php, et non dans le fichier de modèle. Si vous l'avez mis directement dans home.php, retirez-le de là et mettez-le dans functions.php.

Troisième:

Votre filtre pre_get_posts() utilise la condition if ( is_feed() ). La condition is_feed() renvoie true lorsqu'un flux RSS est généré, et non sur l'index des articles de blog (qui est ce qui est généré via home.php). Essayez d’utiliser plutôt is_home() .

Quatrième:

N'appelez pas set_query_var() dans votre rappel. Utilisez $query->set() à la place.

Mettre tous ensemble

Utilisez ce qui suit dans functions.php

<?php
function wpse55358_filter_pre_get_posts( $query ) {
    // Let's only modify the main query
    if ( ! is_main_query() ) {
        return $query;
    }
    // Modify the blog posts index query
    if ( is_home() ) {
        // Exclude Category ID 1
        $query->set( 'cat', '-1' );

        // Build featured posts array
        $featured_posts_array = featured_posts_slider();

        // Exclude featured posts
        $query->set( 'post__not_in', $featured_posts_array );
    }
    // Return the query object
    return $query;
}
add_filter( 'pre_get_posts', 'wpse55358_filter_pre_get_posts' );
?>

Des questions

Quelle catégorie essayez-vous d'exclure? Êtes-vous sûr que l'ID est 1?

3
Chip Bennett