こんにちは。やまぐちなな(@nana_winter_web )です。
the_date()
はなぜ1回しか日付が表示されないのかWordPressを使い始めた頃から気になっていました。
理由を検索してもまったく見つからなかったので、1回しか表示されない理由といい感じの使い方を考えてみました。
あくまでも予想なので、もしかすると他の理由があるかもしれません。
仕様
the_date()
はwp-includes/general-template.php に記述されており、ループ内で該当の投稿日がはじめて登場したときのみ日付を出力します。
ざっくりとした処理は以下で、バグなどではなく意図的に2回目以降は同じ日付を出力しないように条件分岐してあります。
- 前回呼び出された際に保存した日付と現在の記事の日付が違う場合のみ投稿日を出力
- 現在の記事の日付を保存
1回目はthe_date()
を使い、2回目以降はget_the_date()
やthe_time()
を使うのは、同じ日に複数の投稿があった場合に日付が出力されなくなるため避けた方が良いです。
関数が追加された当時の使い方
the_date()
が追加されたバージョン0.71(2007年リリース)のWordPressでthe_date()
を使用しているのは以下のコードです。
<?php foreach ($posts as $post) { start_b2(); ?>
<?php the_date("d.m.y","<h1>","</h1>"); ?>
<p>
<?php permalink_anchor(); ?>
<strong><?php the_title(); ?></strong> (category: <strong><?php the_category() ?></strong>)<br />
<?php the_content(); ?><?php link_pages("<br />Pages: ","<br />","number") ?>
<br />
<em>posted by <strong><?php the_author() ?></strong> @ <a href="<?php permalink_link() ?>"><?php the_time() ?></a></em>
<br />
<?php comments_popup_link("comments ?", "1 comment", "% comments") ?>
</p>
<?php include ("b2comments.php"); ?>
<!-- // this is just the end of the motor - don't touch that line either :) -->
<?php } ?>
ループ内で、該当の日付の記事がはじめて登場した場合にのみ日付を表示。
その後に、記事タイトル、内容などをループで表示しています。
HTML5が出る以前は、アーカイブページに記事の内容をすべて表示するデザインが多かったと思うので、同じ日付を何度も表示する必要がなかったのかもしれません。
現代でthe_date()を使うなら
日付ごとに記事を分けて出力するのを想定しているので、以下のように毎日食べたものを記録するブログなどを運営するのであれば、使えると思います。
<h2>○月○日のご飯</h2>
<p>朝ごはん</p>
<p>昼ごはん</p>
<p>晩ごはん</p>
<h2>×月×日のご飯</h2>
<p>昼ごはん</p>
<p>晩ごはん</p>
日付を表示するときは基本的に、time
タグとdatetime
属性を使うのでわたしは、the_date()
以外の関数を使うと思います。
まとめ
予想ではありますが、WordPressを使い始めた頃からの疑問が解消できてスッキリしました。