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

 
   
   
   
  
こんなお悩み有りませんか?
投稿一覧のほかに最新投稿1つだけ埋め込みたい場所がある
表示したい記事数をphpで書いてるのに、なぜかワードプレスで設定した数の投稿数になる

結論:サブループを使おう
この記事では、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の勉強法について発信していきますので、ぜひフォローしてみてください。
この記事を書いた人

- aimeiです。一日中、生活必須時間以外はコーディングしています。SEO対策も大好物です。
最新の投稿

aimeiです。一日中、生活必須時間以外はコーディングしています。SEO対策も大好物です。
 
   
   
   
  
タグ







 
 
 
 