J'essaie de faire en sorte que ma page d'actualités affiche le contenu d'une catégorie seulement (numéro 3), mais je n'arrive pas à le faire fonctionner. Au lieu d'afficher uniquement les messages de la catégorie 3, il affiche les messages de toutes les catégories.
Voici mon code:
<?php get_header(); ?>
<div class="content news_page">
<h1>Latest News</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">Read more</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(); ?>
L'argument n'est pas category
, il est cat
. Votre requête échoue parce que vous utilisez un argument qui n'existe pas.
$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();
// your loop
}
}
Notez que j'ai converti votre query_posts()
en un nouvel objet WP_Query
. N'utilisez jamais query_posts()
, jamais. Même le Codex le dit.
Remarque: cette fonction n'est pas destinée à être utilisée par des plugins ou des thèmes. Comme expliqué plus tard, il existe de meilleures options plus performantes pour modifier la requête principale. query_posts () est une façon trop simpliste et problématique de modifier la requête principale d'une page en la remplaçant par une nouvelle instance de la requête. Il est inefficace (ré-exécute les requêtes SQL) et échouera carrément dans certaines circonstances (particulièrement lorsqu'il s'agit de pagination de publications). Tout code WP moderne devrait utiliser des méthodes plus fiables, telles que l'utilisation du hook pre_get_posts, à cette fin.
Notez également que j'ai supprimé les balises d'ouverture et de fermeture inutiles PHP et formaté le code pour une meilleure lisibilité. Cette alternative syntaxe de structure de contrôle est une formule d’échec, selon mon expérience.
Personnellement, je le ferais plutôt.
Au lieu de:
'category' => '3',
Remplacez-le par ceci:
'category_name' => 'my-category-slug'
Évidemment, trouvez le nom de votre catégorie limace et remplacez "my-category-slug".
Comme mentionné par @ s-ha-dum, il serait préférable de ne pas utiliser cette méthode et d'utiliser plutôt la méthode WP_Query. Vous pouvez le voir dans le Codex WordPress ici: http://codex.wordpress.org/Class_Reference/WP_Query#Parameters
Obtenir les cinq premiers articles avec une catégorie spécifique
<?php
// the query
$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 News'); ?></p>
<?php endif; ?>
Ajoutez ce code dans votre fichier de fonctions:
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' );
Modifiez la fonction is_home () balise conditionnelle afin qu'elle corresponde à votre page de news ou à une boucle de page de publications si nécessaire. Tout ce que vous avez défini dans Paramètres> Lecture.