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の勉強法について発信していきますので、ぜひフォローしてみてください。
タグ