Afișarea articolelor dintr-o categorie specifică pe o pagină personalizată?
Încerc să fac ca pagina mea de știri să afișeze conținut doar dintr-o singură categorie (numărul 3), dar nu reușesc să o fac să funcționeze. În loc să afișeze doar articolele din categoria 3, afișează articole din toate categoriile.
Iată codul meu:
<?php get_header(); ?>
<div class="content news_page">
<h1>Ultimele Știri</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">Citește mai mult</a></p>
<br>
<div class="clear"></div>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
<div class="clear"></div>
</div><!-- sfârșitul conținutului -->
<div class="clear"></div>
<?php get_footer(); ?>

Obține Primele Cinci Articole Cu O Anumită Categorie
<?php
// interogarea
$the_query = new WP_Query(array(
'category_name' => 'nume_categorie_articol',
'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 __('Niciun Știre'); ?></p>
<?php endif; ?>

Argumentul nu este category
, ci cat
. Interogarea dvs. eșuează deoarece utilizați un argument care nu există.
$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();
// bucla ta
}
}
Observați că am convertit query_posts()
într-un nou obiect WP_Query
. Nu utilizați niciodată query_posts()
. Chiar și Codex menționează acest lucru.
Notă: Această funcție nu este destinată să fie utilizată de plugin-uri sau teme. După cum se explică mai târziu, există opțiuni mai bune și mai performante pentru a modifica interogarea principală. query_posts() este o metodă mult prea simplistă și problematică de a modifica interogarea principală a unei pagini prin înlocuirea ei cu o nouă instanță a interogării. Este ineficientă (re-execută interogările SQL) și va eșua în anumite circumstanțe (mai ales când vine vorba de paginarea postărilor). Orice cod WP modern ar trebui să utilizeze metode mai fiabile, precum utilizarea hook-ului pre_get_posts, în acest scop.
De asemenea, observați că am eliminat tag-urile de deschidere și închidere PHP inutile și am formatat codul pentru o lizibilitate mai bună. Acea sintaxă alternativă a structurii de control este o rețetă pentru eșec, din experiența mea.

Aș face personal astfel mai degrabă.
În loc de:
'category' => '3',
Înlocuiți cu:
'category_name' => 'slug-ul-categoriei-mele'
Evident, găsiți numele slug-ului categoriei și înlocuiți 'slug-ul-categoriei-mele'.
După cum a menționat @s-ha-dum, ar fi mai bine să nu folosiți această metodă și să utilizați în schimb metoda WP_Query. Puteți vedea mai multe detalii în Codex-ul WordPress aici: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters

Adaugă acest cod în fișierul tău 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' );
Schimbă condiția is_home() conditional tag pentru a se potrivi cu pagina ta de știri sau bucla paginii de articole dacă este necesar. Orice ai setat în Setări > Citire.
