web-dev-qa-db-ja.com

ページのスラッグに基づいてカテゴリ名で投稿をフィルタリングする

私はページテンプレートを作成しました、そして目標はカテゴリ名によってすべての投稿を取得するループを作成することです。カテゴリ名はページ名のスラッグから渡されます。これを完全に機能させることはできませんでした。

EDITこのループに対する私の関数は次のとおりです(回答から更新)。

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;

私が得るのは空白の白いページだけなので、私はどこかにめちゃくちゃになった。探しているものを実現するためにループを修正する方法について何か提案はありますか?

1
NW Tech
  1. endwhile;がありません。
  2. 連結しようとしているので、タイトル、パーマリンク、そしてコンテンツにはget_*を使う必要があります。
  3. ここでは$page_slugを、$post_slugをそこで使用しています。ただ1つの同じ変数を使用してください。 ;)
  4. whileループの条件を大括弧で囲みます。

更新されたコードを参照してください。

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

私はあなたのコードにほとんど問題を見ないことができます。

  1. 主な原因は、Whileループが閉じていないため、else:の前に閉じます。これはあなたが空白の画面を取得している理由です。あなたは将来の致命的なエラーのための空白の画面を避けるためにPHPのエラーをオンにする必要があります。

  2. get_the_title()の代わりにthe_title()を使い、get_the_content()の代わりにthe_content()を使う

1
M-R