web-dev-qa-db-ja.com

カスタムカテゴリコードですべての投稿が表示されない

私は自分のサイト上の複数のページに適用しているPHPテンプレートを持っているので、それらはページと同じ名前のカテゴリ内のすべての投稿のリストを表示します。ただし、1つのカテゴリからの投稿(「イベント」)がページにまったく表示されず、別のカテゴリからの投稿(「結果」)が1つだけページに表示されるため、正しく機能しません。それぞれに投稿。

カテゴリ名とページ名が同じであることを確認しました(投稿にそのカテゴリが1つしかない場合でも終わります)ので、それは問題ではありません。それでもコードを読み進めても、明らかなエラーは見られません。

私は自分のテンプレートファイルで次のコードを使って作業しています。

<?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(); ?>

何が問題の原因と考えられますか?

前もって感謝します。

1
DTR

最初に、カテゴリがページとまったく同じ名前であることを確認します(slugとall)。次に、WP_Queryに渡しているパラメータが正しくありません。

  • category_nameはスラグを期待します 。たとえば、Page 1にはpage-1のスラッグがあります。
  • get_the_title()は現在のページのタイトルを取得します - そのため、スラッグPage 1を期待するパラメータにpage-1を渡します。

あなたができることはsanitize_title( get_the_title() )であるか、できればあなたはあなたのドキュメントのトップでglobal $postを宣言し、代わりに$post->post_nameを渡すことができます。

2
Howdy_McGee