【WordPress】1ページ目の1つ目の投稿のみにマークする
今回はWordPressで最新の投稿に「NEW」の表示を付ける方法をご紹介します。
<?php if (!is_paged() && $wp_query -> current_post < 1): ?>
<p class="new">NEW</p>
<?php endif; ?>
以上です。
ループの処理を含めると、こうなります。
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php if (!is_paged() && $wp_query -> current_post < 1): ?>
<p class="new">NEW</p>
<?php else: ?>
<p>NEWじゃない</p>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
……このままでは記事投稿の許可が下りないため少しだけ解説します。
$wp_query -> current_post
関数リファレンス/WP Query
※サイトの情報は古い場合があります
「$wp_query」には現在のページのループの情報が格納されています。
「$wp_query -> current_post」ではページ内のループの投稿の数をカウントアップします。
ページをまたいだループについては関知しません。
$wp_query -> current_post < 1
上記のコードは「 $wp_query -> current_post が1未満のとき(1は含まない)」を表し、カウントが0のときにのみ「true」を返します。
※プログラムでは多くの場合0からカウントされます。
この数字を増やしていくとNEW表記の記事が増えていきます。
しかしこのコードだけでは、2ページ目以降の一番初めに表示される記事にも「new」がついてしまいます。
そこで、「is_paged()」を併せて使用します。
is_paged()
関数リファレンス/is paged
※サイトの情報は古い場合があります
表示中のページが複数ページにわたり、現在のページ番号が 1 より大きいかどうかを調べます
この関数は、現在表示されているページが1ページ目なら「false」、2ページ目以降なら「true」を返します。
したがって1ページ目であることを表現するには、下記のいずれかの方法を用いることができます。
!is_paged()
// 先頭の「!」は否定の意味、この場合は「is_paged()がfalseである」ことを表す
is_paged() != true
// is_paged()がtrueではない
is_paged() === false
// is_paged()がfalseである
また「is_paged()」は条件分岐タグの一種で、WordPressにはさまざまな条件分岐タグが用意されています。
上記2つの式を組み合わせたものが下記になります。
!is_paged() && $wp_query -> current_post < 1
間にある「&&」は「なおかつ」という意味で、繋がれた式がすべて「true」を返すときに「true」となります。
解説を総合して、最初のコードを翻訳すると以下のようになります。
<?php if(!is_paged() && $wp_query -> current_post < 1): ?>
<!-- もしこのページが「このループの最初のページ」で、なおかつこの投稿が「このページに表示される最初の投稿」なら -->
<p class="new">NEW</p> <!-- HTMLを出力 -->
<?php endif; ?><!-- ifを閉じる -->
おしまい
弊社ではホームページ・WEBサイトの制作から、動画作成、オンライン配信のサポート、Google Analyticsを活用したアクセス解析、 WEB広告の運用まで、WEBに関する様々な事業を行っております。
そんな株式会社アルタがお届けするソリューションが気になる方は…
また、弊社の公式SNSも要チェック!