サポート » 使い方全般 » 最新記事5件を表示し、残り5件は「more」で表示 ループの分け方

  • 解決済 chibiyuko_0124

    (@chibiyuko_0124)


    いつもお世話になっております。

    新着記事の一覧を、最新5件を表示し、下部の「more」ボタンを押すと6件目から10件目の記事が表示されるような形にしたいと思っています。
    「最新5件まで」「6件目以降」の記事の抽出まではできたのですが、
    下記のタグの中に「more」ボタンの設置や、6件目以降の記事たちだけを<div>で囲いたい(始めは非表示にしたいので)のですが、上手くいきません。

    <?php if ( have_posts() ) : ?>
    <?php $cnt = 0; ?>
    <?php while ( have_posts() ) : the_post(); ?>
    <?php if($cnt < 5) : ?>
    
    <?php // 5件目までここから ?>
    アイキャッチ・記事タイトルなど
    <?php // 5件目までここまで ?>
    
    <?php else: ?>
    <?php // 6件目以降ここから ?>
    アイキャッチ・記事タイトルなど
    <?php // 6件目以降ここまで ?>
    <?php endif; ?>
    
    <?php $cnt++; ?>
    <?php endwhile; ?>
    <?php endif; ?>

    ★希望の表示順
    [5件目までの記事()]
    [moreボタン]
    [6件目以降の記事(moreを押すと表示される)]

    3行目のループタグの影響で、「more」やdivの囲いもループ化されてしまいます。
    どうにかループを分けたり、または別の方法で解決できますでしょうか。
    ご教授いただけますと幸いです。

    また、このような表示は最初のページのみで、11件目以降(2ページ目以降)は普通に記事一覧が表示されるような形を想定しております。

    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    1. moreボタンの表示
    ループ内で、$cnt の値が 5 の時に、ループの最初で出力するようにしてみてください。

    <?php while ( have_posts() ) : the_post(); ?>
    <?php if ( 5 == $cnt ) : ?>
    moreボタン
    <?php endif; ?>

    2. div の囲い
    最初の5件を囲む場合は、ループ前で、divの開始し、more ボタンの表示タイミングで閉じます。
    6件目以降を囲む場合は、more ボタン表示のタイミングで、div を開始し、ループが終わった後で閉じます。

    3. 2ページ目以降の表示の場合
    条件分岐タグの is_paged を使用すると、2ページ目以降か否かを判定できますので、これを用いてmore などが表示されないようにすれば大丈夫です。

    トピック投稿者 chibiyuko_0124

    (@chibiyuko_0124)

    jimさま

    ありがとうございます!
    いただいた内容を元に構築できました!

    <?php if ( have_posts() ) : ?>
    <?php $cnt = 0; ?>
    <?php while ( have_posts() ) : the_post(); ?>
    
    <?php if ( !is_paged() ) : ?>
    <?php //more
     if ( 5 == $cnt ) : ?>
    moreボタン
    <div> <!-- 6件目以降に囲む -->
    <?php endif; ?>
    <?php endif; ?>
    
    <?php if($cnt < 5) : ?>
    5件目用までの記事タイトル、アイキャッチなど
    <?php else: ?>
    6~10件目用までの記事タイトル、アイキャッチなど
    <?php endif; ?>
    </article>
    
    <?php $cnt++; ?>
    <?php endwhile; ?>
    ページャー
    </div> <!-- 6件目以降に囲む -->
    <?php endif; ?>

    トピックスは解決済みとさせていただきます。
    本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「最新記事5件を表示し、残り5件は「more」で表示 ループの分け方」には新たに返信することはできません。