it-swarm.com.de

Filtern von Beiträgen nach Kategorienamen basierend auf dem Slug der Seite

Ich habe eine Seitenvorlage erstellt und das Ziel ist es, eine Schleife zu erstellen, die alle Beiträge nach Kategorienamen abruft. Der Kategoriename wird vom Slug des Seitennamens übergeben. Ich war nicht in der Lage, dies vollständig zum Laufen zu bringen.

EDITHier ist meine Funktion für diese Schleife (aktualisiert von Antworten):

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;

Ich habe es irgendwo vermasselt, da ich nur eine leere weiße Seite bekomme. Irgendwelche Vorschläge, wie ich meine Schleife reparieren kann, um das zu erreichen, wonach ich suche?

1
NW Tech
  1. Ihnen fehlt ein endwhile;.
  2. Da Sie versuchen zu verketten, müssen Sie get_* für Titel, Permalink und Inhalt verwenden.
  3. Sie verwenden hier $page_slug und dort $post_slug. Verwenden Sie einfach ein und dieselbe Variable. ;)
  4. Setzen Sie die Bedingung der while-Schleife in eckige Klammern.

Siehe aktualisierten Code:

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

Ich kann einige Probleme in Ihrem Code sehen.

  1. Die Hauptursache ist, dass Ihre While-Schleife nicht geschlossen wird. Schließen Sie sie vor dem else:. Dies ist der Grund, warum Sie einen leeren Bildschirm erhalten. Sie sollten PHP-Fehler aktivieren, um zu vermeiden, dass der Bildschirm für zukünftige schwerwiegende Fehler leer bleibt.

  2. benutze get_the_title() anstelle von the_title() und get_the_content() anstelle von the_content()

1
M-R