Visualizzare articoli di una categoria specifica in una pagina personalizzata?
Sto cercando di far visualizzare nella mia pagina news solo i contenuti di una categoria specifica (numero 3) ma non riesco a farlo funzionare. Invece di mostrare solo i post della categoria 3, visualizza i post di tutte le categorie.
Ecco il mio codice:
<?php get_header(); ?>
<div class="content news_page">
<h1>Ultime Notizie</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">Leggi di più</a></p>
<br>
<div class="clear"></div>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
<div class="clear"></div>
</div><!--fine del contenuto-->
<div class="clear"></div>
<?php get_footer(); ?>

Ottieni i Primi Cinque Post con una Categoria Specifica
<?php
// la query
$the_query = new WP_Query(array(
'category_name' => 'nome_categoria_post',
'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 __('Nessuna Notizia'); ?></p>
<?php endif; ?>

L'argomento non è category
, ma cat
. La tua query fallisce perché stai utilizzando un argomento che non esiste.
$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();
// il tuo loop
}
}
Nota che ho convertito il tuo query_posts()
in un nuovo oggetto WP_Query
. Non usare mai query_posts()
, mai. Anche il Codex lo afferma.
Nota: Questa funzione non è pensata per essere utilizzata da plugin o temi. Come spiegato in seguito, ci sono opzioni migliori e più performanti per modificare la query principale. query_posts() è un modo eccessivamente semplicistico e problematico per modificare la query principale di una pagina sostituendola con una nuova istanza della query. È inefficiente (ri-esegue le query SQL) e fallirà completamente in alcune circostanze (specialmente spesso quando si ha a che fare con l'impaginazione dei post). Qualsiasi codice WP moderno dovrebbe utilizzare metodi più affidabili, come sfruttare l'hook pre_get_posts, per questo scopo.
Inoltre, nota che ho rimosso i tag PHP di apertura e chiusura non necessari e ho formattato il codice per una migliore leggibilità. Quella sintassi alternativa delle strutture di controllo è una ricetta per il fallimento, secondo la mia esperienza.

Personalmente, farei piuttosto così.
Invece di:
'category' => '3',
Sostituiscilo con questo:
'category_name' => 'il-mio-slug-categoria'
Ovviamente trova il nome del tuo slug di categoria e sostituisci 'il-mio-slug-categoria'.
Come menzionato da @s-ha-dum sarebbe meglio non usare questo metodo e piuttosto usare il metodo WP_Query. Puoi vederlo nel Codex di WordPress qui: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters

Aggiungi questo codice nel tuo file functions.php:
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' );
Modifica il tag condizionale is_home() conditional tag per corrispondere alla tua pagina di notizie o al loop della pagina degli articoli se necessario. Qualunque cosa tu abbia impostato in Impostazioni > Lettura.
