web-dev-qa-db-fra.com

Filtrage des publications par nom de catégorie en fonction du slug de la page

J'ai créé un modèle de page et l'objectif est de créer une boucle qui récupère tous les messages par nom de catégorie. Le nom de la catégorie est transmis à partir du slug du nom de la page. Je n'ai pas réussi à obtenir que cela fonctionne entièrement.

EDITVoici ma fonction pour cette boucle (mise à jour à partir des réponses):

global $post;
$page_slug = $post->post_name;

$category_query = new WP_Query(array(
    'category_name' => $page_slug
));

if ($category_query->have_posts()) :
    while ($category_query->have_posts()) :
        $category_query->the_post();
        $output = '<h2 class="entry-title" itemprop="headline"><a href="'.get_the_permalink().'">'.get_the_title().'</a></h2>';
        $output .= '<div class="entry-content" itemprop="text">'.get_the_content().'</div>';
    endwhile;
else :
    $output = '<h3>No posts found under "'.$page_slug.'"</h3>';
endif;

wp_reset_postdata();

echo $output;

J'ai foiré quelque part, car tout ce que j'ai est une page blanche. Des suggestions sur la façon de réparer ma boucle pour accomplir ce que je cherche?

1
NW Tech
  1. Il vous manque un endwhile;.
  2. Puisque vous essayez de concaténer, vous devez utiliser get_* pour le titre, le lien permanent et le contenu.
  3. Vous utilisez $page_slug ici et $post_slug ici. Il suffit d'utiliser une seule et même variable. ;)
  4. Placez la condition de la boucle while entre crochets.

Voir le code mis à jour:

global $post;
$page_slug = $post->post_name;
$args = array(
    'category_name' => $page_slug
);
$category_query = new WP_Query($args);

if ($category_query->have_posts()) {
    while ($category_query->have_posts()) {
        $category_query->the_post();
        ?>
        <h2 class="entry-title" itemprop="headline"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <div class="entry-content" itemprop="text"><?php the_content(); ?></div>
        <?php
    }
} else {
    ?>
    <h3>No posts found under "<?php echo $page_slug; ?>"</h3>
    <?php
}
wp_reset_postdata();
4
tfrommen

Je peux voir quelques problèmes dans votre code.

  1. La cause principale est que votre boucle While ne se ferme pas, fermez-la avant le else:. C'est la raison pour laquelle vous obtenez un écran vide. Vous devriez activer les erreurs php pour éviter un écran vide pour les erreurs fatales futures.

  2. utilisez get_the_title() au lieu de the_title() et get_the_content() au lieu de the_content()

1
M-R