¿Cómo mostrar publicaciones en una página personalizada solo de una categoría específica?

21 may 2014, 18:13:56
Vistas: 90.1K
Votos: 4

Estoy intentando que mi página de noticias muestre contenido solo de una categoría específica (la número 3) pero no logro que funcione. En lugar de mostrar solo las publicaciones de la categoría 3, muestra publicaciones de todas las categorías.

Aquí está mi código:

<?php get_header(); ?>

            <div class="content news_page">

                       <h1ltimas Noticias</h1>     

                       <?php $args = array(
                            'post_type' => 'post' ,
                            'orderby' => 'date' ,
                            'order' => 'DESC' ,
                            'posts_per_page' => 6,
                            'category'         => '3',
                            'paged' => get_query_var('paged'),
                            'post_parent' => $parent
                       ); ?>
                       <?php query_posts($args); ?>

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

                                <div class="large-4 medium-4 small-12 columns">
                                    <div class="latest_news_cont">
                                    <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a>

                                    <a href="<?php the_permalink() ?>"><h5><?php the_title(); ?></h5></a>
                                    <?php the_excerpt(); ?>
                                    <p style="text-align:center;"><a href="<?php the_permalink() ?>" class="readmore_news">Leer más</a></p>
<br>
<div class="clear"></div>
                                       </div>
                                    </div>

                            <?php endwhile; ?>
                        <?php endif; ?>

<div class="clear"></div>

            </div><!--end of content-->

<div class="clear"></div>

<?php get_footer(); ?>
4
Comentarios

¿Exactamente qué no funciona? Además, por favor no uses query_posts.

s_ha_dum s_ha_dum
21 may 2014 18:22:58

Hola, en lugar de mostrar publicaciones de una categoría específica, muestra publicaciones de todas las categorías

user3615681 user3615681
21 may 2014 18:27:55

¿Tu página de noticias es la página de publicaciones configurada en tus Ajustes de lectura?

Brad Dalton Brad Dalton
21 may 2014 18:52:28

https://wordpress.stackexchange.com/a/290909/133699

Muhammad Bilal Muhammad Bilal
28 mar 2018 17:42:58
Todas las respuestas a la pregunta 5
0

Obtener las primeras cinco publicaciones con una categoría específica

<?php
        // la consulta
        $the_query = new WP_Query(array(
            'category_name' => 'post_category_name',
            'post_status' => 'publish',
            'posts_per_page' => 5,
        ));
        ?>

        <?php if ($the_query->have_posts()) : ?>
            <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
                <?php the_category(); ?>
                <?php the_title(); ?>
                <?php the_excerpt(); ?>
                <?php the_post_thumbnail(); ?>
                <?php the_content(); ?>

            <?php endwhile; ?>
            <?php wp_reset_postdata(); ?>

        <?php else : ?>
            <p><?php __('No hay noticias'); ?></p>
        <?php endif; ?>
12 ene 2018 14:26:03
0

El argumento no es category, es cat. Tu consulta falla porque estás usando un argumento que no existe.

$args = array(
  'post_type' => 'post' ,
  'orderby' => 'date' ,
  'order' => 'DESC' ,
  'posts_per_page' => 6,
  'cat'         => '3',
  'paged' => get_query_var('paged'),
  'post_parent' => $parent
); 
$q = new WP_Query($args);
if ( $q->have_posts() ) { 
  while ( $q->have_posts() ) {
    $q->the_post();
    // tu loop
  }
}

Observa que he convertido tu query_posts() en un nuevo objeto WP_Query. No uses query_posts(), nunca. Incluso el Codex lo indica.

Nota: Esta función no está destinada a ser utilizada por plugins o temas. Como se explica más adelante, existen opciones mejores y más eficientes para alterar la consulta principal. query_posts() es una forma demasiado simplista y problemática de modificar la consulta principal de una página reemplazándola con una nueva instancia de la consulta. Es ineficiente (vuelve a ejecutar consultas SQL) y fallará rotundamente en algunas circunstancias (especialmente al tratar con la paginación de posts). Cualquier código moderno de WP debería usar métodos más confiables, como hacer uso del hook pre_get_posts, para este propósito.

http://codex.wordpress.org/Function_Reference/query_posts

También observa que eliminé las etiquetas de apertura y cierre de PHP innecesarias y formateé el código para una mejor legibilidad. Esa sintaxis alternativa de estructuras de control es una fórmula para el fracaso, en mi experiencia.

21 may 2014 18:42:56
1

Personalmente, yo haría esto en su lugar.

En vez de:

'category' => '3',

Sustitúyelo por esto:

'category_name' => 'mi-slug-de-categoria'

Obviamente, encuentra el nombre del slug de tu categoría y reemplaza 'mi-slug-de-categoria'.

Como mencionó @s-ha-dum, sería mejor no usar este método y en su lugar usar el método WP_Query. Puedes verlo en el Codex de WordPress aquí: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters

21 may 2014 18:47:15
Comentarios

Gracias. Esto me dio la solución para saber que en la propiedad "category_name" necesitas enviar el "slug" en lugar del nombre de la categoría (incluyendo espacios). ¡Gracias!

Fernando Torres Fernando Torres
31 may 2021 19:19:52
0

Añade este código en tu archivo de funciones:

function wpsites_display_one_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( 'cat', '3' );
    }
}
add_action( 'pre_get_posts', 'wpsites_display_one_category' );

Cambia la etiqueta condicional is_home() etiqueta condicional para que coincida con tu página de noticias o el bucle de la página de entradas si es necesario. Lo que hayas configurado en Ajustes > Lectura.

21 may 2014 18:52:00
0

Deberías cambiar

'category'         => '3',

por esto en tu código:

'cat' => '3',
13 nov 2018 13:01:47