¿Cómo mostrar publicaciones en una página personalizada solo de una categoría específica?
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">
<h1>Últimas 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(); ?>

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; ?>

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

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

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.
