サポート » 使い方全般 » 固定ページで特定のカテゴリーの投稿記事一覧を表示させるには?

  • 解決済 studiooak

    (@studiooak)


    初心者です。
    既存のテーマを使って一部カスタマイズしています。
    固定ページ(page-lesson.php)で、あるカテゴリーの投稿記事のみを表示させたいのですが、WP_Queryでもget_postsでもうまくいきません。get_postsではエラーで真っ白画面になり、WP_Queryでは記事が一件しか表示されません。
    どのコードが間違っているのでしょうか?

    get_postsのコード

    <div class="lesson-post">
    <?php
    $args = array( 
    ‘category’ => 2;
    ‘post_type’ => ‘post’;
    'posts_per_page' => -1 ;
    $lesson_posts = get_posts( $args );
    foreach ($lesson_posts as $post ) :
      setup_postdata( $post ); 
    ?>
            <article id="post"> 
               <div class="entry">
                 <div class="lesson-text"> 
                  <h3><?php the_title(); ?></h3> 
                  <p><?php the_content() ?></p> 
                 </div>
               </div><!-- .entry --> 
            </article><!-- #post --> 
    <?php
    endforeach; 
    wp_reset_postdata();
    ?>
    </div>

    WP_Queryのコード

    
    <div class="span_12">
    <?php
        $wp_query = new WP_Query();
        $my_posts = array(
            'post_type' => 'post',
            'category_name' => ‘lesson’,
            'posts_per_page'=> ‘4’,
        );
        $wp_query->query( $my_posts );
        if( $wp_query->have_posts() ): while( $wp_query->have_posts() ) : $wp_query->the_post();
    ?>
    
    <div class="col boxed lesson-post">
    <?php
    get_template_part('content','lesson')
    ?>
    </div><!-- lesson-post -->
    <?php
    
         endwhile; endif;
    
    wp_reset_postdata();
    
    ?>
    </div>
    

    どなたか、お教え願えれば!! どうぞよろしくお願いいたします。

    • このトピックはstudiooakが5年、 4ヶ月前に変更しました。
    • このトピックはstudiooakが5年、 4ヶ月前に変更しました。
    • このトピックはstudiooakが5年、 4ヶ月前に変更しました。
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • ぱっと見ですが最初のPOSTパラメータの配列とじ括弧が不足していませんか。
    括弧の個数確認、とじ括弧確認は無料のエディタ(WindowsではさくらエディタやMKエディタなど)
    Macではコーディングしないのであいまいで申し訳ございませんがMacも無料のエディタで色がかわった気がします。
    書式の確認ができる環境かもしくはコメントをひとつづつつけて開始完了を確認したり宣言内容が確実か確認しながら作業を進められてはいかがでしょうか。

    LABE

    (@latobeam)

    そもそも get_posts() 版では配列の書き方が根本的に間違っていますね。

    $args = array( 
        'category' => 2,
        'post_type' => 'post',
        'posts_per_page' => -1,
    );
    • 配列の要素はコンマ , 区切りです。
    • 上の例では一行に一つずつ要素を書いていますが、改行しなくても構いません。
    • => の左側が要素のキー、右側が要素の値です。
    • また、配列は array( から書き始め、 ) で終わります。※別の書き方もあります

    その上で、気になった点をいくつか。

    • get_posts() 版がエラーになった原因は上記のものでしょう。真っ白のエラー画面といっても、おそらく「Syntax Error」などと行番号付きのメッセージが出ていると思われます。それでエラーの原因は特定できます。
    • get_posts() 版での引数 category ですが、こちらは現在非推奨です。代わりに cat をお使いください。
    • get_posts() 版と WP_Query 版で引数が異なっていますね。どちらがあなたの意図するものなのか俺にはわかりかねますが、前者は新しい順に全件表示、後者は4件表示ですね。 get_posts()WP_Query では、引数 $args の形式はほぼ同じになっているので、何行かのコードの書き換えで相互に置き換えられるようになっています。
    • WP_Query 版では get_template_part() が使われていますが、このテンプレートファイルの中身がわからないので厳密なアドバイスはできません。
    • WP_Query 版で $wp_query という変数が使われていますが、これはグローバル変数であり、書き換えるべきではありません。 $my_query という変数をこれの代わりに使ってみましょう。3行目から9行目までを下記の「コード1」のように書き換えてみてください。
    • WP_Query 版の wp_reset_postdata();endwhile;endif; の間に書くのが適切です。

    コード1

        $args = array(
            'post_type' => 'post',
            'category_name' => 'lesson',
            'posts_per_page'=> 4,
        );
        $my_posts = new WP_Query( $args );
    トピック投稿者 studiooak

    (@studiooak)

    msio様
    LABE様

    ご親切にありがとうございました。
    おかげさまで表示することができました!!

    重ねてお礼を申し上げます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「固定ページで特定のカテゴリーの投稿記事一覧を表示させるには?」には新たに返信することはできません。