web-dev-qa-db-fra.com

Exclure la catégorie sur la page de la liste de blogs

J'ai un site avec une page de nouvelles (archive pour la catégorie 'nouvelles') et une page de blog séparée. Lorsque je fais un post pour la page Nouvelles, je sélectionne la catégorie "Nouvelles". Ainsi, sur la page de nouvelles, vous ne voyez que les articles marqués, mais sur la page de blog, vous pouvez voir tous les articles. Ce que je voudrais faire, c'est de préférence afficher tous les messages SAUF les messages de "nouvelles" sur la page du blog. Comment puis-je faire cela?

<!--post start-->
            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                    <!--post start-->
                    <div class="post">
                        <div class="box">
                            <div class="postimgbox">
                                <?php if ((function_exists('has_post_thumbnail')) && (has_post_thumbnail())) { ?>
                                    <?php the_post_thumbnail(); ?>
                                <?php } else {

                                }
                                ?>
                            </div>
                            <ul class="post_meta">
                                <li class="post_date">&nbsp;&nbsp;<?php echo get_the_time('M, d, Y') ?></li>
                                <li class="post_comment">&nbsp;&nbsp;
                                <?php comments_popup_link('No Comments.', '1 Comment.', '% Comments.'); ?>
                                </li>
                                <br />
                                <li class="posted_by">&nbsp;&nbsp;
                                <?php the_author_posts_link(); ?>
                                </li>
                                <br />
                                <li class="post_category">&nbsp;&nbsp;
                                <?php the_category(', '); ?>
                                </li>
                                <br />
                            </ul>
                        </div>
                        <div class="post_content">
                            <h1 class="post_title"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>">
                            <?php the_title(); ?>
                                </a></h1>
                    <?php the_excerpt(); ?>
                            <a class="read_more" href="<?php the_permalink() ?>"><?php _e('Read More', 'infoway'); ?>&nbsp;<span class="button-tip"></span></a> </div>
                    </div>
                    <!--End Post-->

Ci-dessus, le code de blog.php, le fichier php que je tente d’éditer car c’est le modèle de ma page de blog (si cela aide)

2
Omar

Depuis un plugin ou le fichier functions.php de votre thème:

function wpse106861_mod_query( $query ) {
    /* are we on the blog page ? */
    if ( $query->is_home() && $query->is_main_query() ) {
        /* get ID of news category */
        $news_id = get_cat_ID( 'news' );
        /* exclude posts in new from query */
        $query->set( 'category__not_in' => array( $news_id ) );
    }
}
add_action( 'pre_get_posts', 'wpse106861_mod_query' );

Mise à jour
En ce qui concerne le commentaire: is_home doit renvoyer true sur n’importe quelle page d’index de blog, qu’il s’agisse d’une page statique ou de la page d’accueil. De toute façon, vous pouvez aussi vérifier directement la page de garde en modifiant légèrement le conditionnel:

if ( $query->is_front_page() && $query->is_main_query() )

Lecture connexe

4
Johannes Pille

Vous pouvez le faire avec pre_get_posts filter. Fais-le comme ça:

function my_exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'category__not_in', array( 1, 1347 ) );  // where 1 and 1347 are IDs of excluded categories
    }
}
add_action( 'pre_get_posts', 'my_exclude_category' );

PS Je suppose que cette page de blog est définie comme votre page de messages.

3
Krzysiek Dróżdż