【WordPress】1ページ目の1つ目の投稿のみにマークする

2022年10月1日WebWordPress

今回は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も要チェック!

Posted by Neon