J'ai un modèle PHP que je postule sur plusieurs pages de mon site afin qu'elles affichent la liste de tous les articles d'une catégorie portant le même nom que la page. Toutefois, cela ne fonctionne pas correctement dans la mesure où les publications d'une catégorie ("Événements") n'apparaissent pas du tout sur sa page, alors qu'une seule publication d'une autre catégorie ("Résultats") apparaît sur sa page malgré plusieurs messages dans chacun.
J'ai vérifié que les noms de catégorie et de page sont les mêmes (même si les articles n'ont que cette catégorie), ce n'est donc pas le problème. Pourtant, en lisant le code, je ne vois aucune erreur évidente.
Je travaille avec le code suivant dans mon fichier de modèle:
<?php /*
Template Name: List-all-posts-in-category
*/ ?>
<?php get_header(); ?>
<div id="main">
<?php get_sidebar(); ?>
<div id="content">
<div id="content-post">
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div id="content-post-title">
<h1><?php the_title(); ?></h1>
</div>
<?php the_content(); ?>
<?php endwhile; else: endif; ?>
<?php $the_query = new WP_Query( array( 'category_name' => sanitize_title( get_the_title() ) ) ); ?>
<?php $yearNumber = 'YEARNOTSET'; ?>
<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php if ($yearNumber != get_the_date($d = 'Y')): ?>
<?php $yearNumber = get_the_date($d = 'Y'); ?>
<div id="content-category-post-date">
<h1><?php the_date($d = 'Y'); ?></h1>
</div>
<?php endif; ?>
<div id="content-category-post-title">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
</div>
<?php endwhile; else: endif; ?>
</div>
</div>
</div>
<div id="delimiter">
</div>
<?php get_footer(); ?>
Des idées sur ce qui pourrait causer le problème?
Merci d'avance.
Tout d’abord, assurez-vous que la catégorie porte exactement le même nom que la page (slug and all). Deuxièmement, les paramètres que vous transmettez à WP_Query
sont incorrects.
category_name
attend un slug . Par exemple, Page 1
aurait un slug de page-1
.get_the_title()
extrait le titre de la page en cours - vous passez donc Page 1
à un paramètre qui attend un slug page-1
.Ce que vous pouvez faire est sanitize_title( get_the_title() )
ou préférablement vous pouvez déclarer global $post
en haut de votre document et transmettre à la place $post->post_name
.