wordpress

1つだけ投稿したいのに!3分で解決!投稿数を変えたい時のphp書き方

ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ

こんなお悩み有りませんか?

投稿一覧のほかに最新投稿1つだけ埋め込みたい場所がある

表示したい記事数をphpで書いてるのに、なぜかワードプレスで設定した数の投稿数になる

メインの画像の下に「新着記事」が一件あって、ページ下部にはNEWSとして3件表示する場所がある…同じページの二か所で違う件数の記事を表示したい。

結論:サブループを使おう

この記事では、LPなどで、最新のお知らせ1件を上部に表示させたい時のお悩みを解決します。
初めに必要なコードを乗せているのでコピペでスマートに解決できます。
後半には詳しい解説があるので、理解して納得したいな~という人はどうぞ最後まで見ていってください。

良い例(サブループの<?php if ($the_query->have_posts()) : ?>)を使っている

<?php
  $args = array(
    'post_type' => 'post',
    'posts_per_page' => 12,
  );
  $the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()): ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
  <!-- ここに投稿がある場合の記述 例-->
        <span class="p-s1__news-label">NEWS</span>
       <time class="p-s1__news-date" datetime="<?php the_time('c'); ?>"><?php the_time('Y.m.d'); ?></time>
       <p class="p-s1__news-text"><?php echo get_the_title(); ?></p>
<?php endwhile; ?>
<?php else: ?>
  <!-- ここに投稿がない場合の記述  例-->
 <p>表示する記事はありませんでした。</p>
<?php endif; wp_reset_postdata(); ?>       

悪い例(メインループのif (have_posts()) : ?>を使っている)


<?php if ( have_posts() ) : ?>
  <?php while(have_posts()): the_post(); ?>
    <!-- 繰り返し処理する内容 -->
  <span class="p-s1__news-label">NEWS</span>
 <time class="p-s1__news-date" datetime="<?php the_time('c'); ?>"><?php the_time('Y.m.d'); ?></time>
   <p class="p-s1__news-text"><?php echo get_the_title(); ?></p>
  <?php endwhile; ?>
<?php else: ?>
  <!-- ここに投稿がない場合の記述  例-->
 <p>表示する記事はありませんでした。</p>
<?php endif; ?>


                    <?php
                    //記事数ぶんループ
                    while (have_posts()) :
                        the_post(); ?>
                        <!-- entry-item -->




                        <p class="p-s12__text">
                            <time class="p-s12__date" datetime="<?php the_time('c'); ?>"><?php the_time('Y.m.d'); ?></time>
                            <?php echo wp_trim_words(get_the_title(), 400, '…'); ?>
                        </p>
                    <?php
                    endwhile;
                    ?>

                <?php
                    wp_reset_postdata();
                endif; ?>
            </div><!-- /.p-s12__texts -->
        </div><!-- /.p-s12__inner -->

wpの記事取得のループの書き方は「メインループ」「サブループ」二種類あり、「メインループ」はページの中で一回しか使えない

お知らせ一覧ページ、アーカイブページ→メインループでOK。テンプレートで言うと、

  • index.php
  • archive.php
  • category.php

はメインループを使う。

「投稿」はindex.php、front-page.phpやarchive.phpなどにはデフォルトで読み込まれる。

一方固定ページではpage.phpには読み込まれず、デフォルトで読み込むクエリは「固定ページの情報」なので、<?php echo get_the_title(); ?>だけを書くと、その固定ページの情報が出力されて、「投稿」の情報は出力されない。
メインループの場合は件数に関しては管理画面の「設定>表示設定」にて投稿の件数を設定することが可能。

悩んだらサブループを使おう

上記3つのテンプレート以外のテンプレートで投稿記事を表示させたいときはサブループを使おう。
件数を変えたい時や、下層ページで投稿記事を引っ張ってきたい時はサブループを使う。
メインループが使えるときはメインループを使うと記述量が少なくて済むので美しいコードとなる。

参考になったらいいねを戴けると励みになります。これからも簡単なコツで解決できるwpやjQueryの勉強法について発信していきますので、ぜひフォローしてみてください。

ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ
ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ ロリポップ