Excluir categoría en la página de lista de blogs

2

Tengo un sitio con una página de Noticias (archivo para la categoría 'noticias') y una página de Blog separada. Cuando hago una publicación para la página de Noticias, selecciono la categoría 'noticias'. Entonces, en la página de noticias solo ves las publicaciones marcadas como noticias, pero en la página del blog puedes ver todas las publicaciones. Lo que me gustaría hacer es, preferiblemente, mostrar todas las publicaciones, EXCEPTO las publicaciones de "noticias" en la página del blog. ¿Cómo hago esto?

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

Arriba está el código de blog.php, el archivo php que estoy tratando de editar, ya que es la plantilla de mi página de blog (si es que ayuda)

    
pregunta Omar 17.07.2013 - 16:45

3 respuestas

-1

Gracias por responder a mi pregunta, pero después de intentar hacer otra cosa, pude encontrar la respuesta y lo que creo que es la más fácil y la más breve. En el bucle principal para publicar las publicaciones, verá algo similar a

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

Antes de este código, agregue en la siguiente línea,

<?php query_posts('cat=-4'); ?>

Donde 4 es la categoría id. El signo - significa "no" y es similar a! en C. Esto significará que todas las publicaciones que no estén en la categoría ID 4 se mostrarán en esa página

    
respondido por el Omar 18.07.2013 - 12:50
4

Desde un complemento o desde el archivo functions.php de su tema:

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' );

Actualizar
En cuanto al comentario: is_home debería devolver verdadero en cualquier página de índice de blog, sin importar si es una página estática o su página principal. De todos modos, también puede consultar la página principal directamente, modificando ligeramente el condicional:

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

Lecturas relacionadas

respondido por el Johannes Pille 17.07.2013 - 16:55
3

Puede hacerlo con el filtro pre_get_posts . Hazlo así:

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. Supongo que esta página de Blog está configurada como tu página de publicaciones.

    
respondido por el Krzysiek Dróżdż 17.07.2013 - 16:51

Lea otras preguntas en las etiquetas