WordPressのthe_date()が表示されない!

wordpress_logo

どうもこんにちは!
サイトのレイアウトを修正中に嵌ってしまいました…
備忘録も兼ねて書きたいと思います。

今回のターゲットはWordPress組み込みの関数the_date()になります。

TL;DR

the_date関数は使う必要がない。get_the_date関数を使うべき

理由は簡単、取得する際にグローバル変数による参照が邪魔をして、2回目の参照時に値を取得できないため

公開日と最終公開日を追加してみる

今まで更新日時のみを表示していました。

周りのブログをみるとかっこよく最終公開日も表示していることに気づいた僕
真似したい!と思い修正する。

最終公開日を表示する候補としてget_the_modified_date()とthe_modified_date()があった。

深く考えずにthe_modified_date()を選択し、今までget_the_date()を使っていたのをそれに合わせてthe_date()に変更しました。

なぜか公開日が表示されない

追加したの最終公開日じゃん!意味不明!
いらいらしていた時間を10分過ごした後、我に返り開発者ツールで調べてみました。

そう、the_date関数はきちんと動いていたのです。timeタグのtime属性の中で…

これはWordPressの正常な動作です

これは正常な動作をWordPressはしているらしい…

腹は立つがそういう「仕様」みたいだ。

ならば、そのコードを直接見せていただこうではないか。


WordPressのプロジェクトはGitHubにありますので気になる方は是非ご覧ください。

やばい予感

global $currentday, $previousday;

この記述を見たとき私のやる気は失った。

なぜかって?そう、これは変数のスコープの問題が絡んでくることを私に明示的に叩きつけてきたからだ。

WordPress初心者でありPHPも基本構文しかほぼ知らない私にとっては苦痛の始まりでしかないのである。

分かる人ならis_new_day関数とグローバル変数を操作する$previousday = $currentday;がやばそうだと分かるだろう

原因解明

それではis_new_day関数はどのように動くのか?気になって仕方ないので調べることになる。

以下がそのコードだ。

もうお分かりだろう。詳しく説明する気はまったく起きない

ただし、結論として「同じ日は二度とこない」のである。

確かに人生で同じ日は二度と来ないが・・・

じゃあどうすんだよ?!

使えないことが分かった。それだけでは意味がない。じゃあどうすればいいのか?

同じことを考えた人が大勢いたのだろう。改善されたコードが以下である


これは何をしているのか?詳細は割愛させていただくが、ソースコードを見たところグローバル変数から現在の投稿情報を取得し、その情報に基づいてデータベースの日付を取得している。それだけだ。

結論

the_date関数は同一の日付について感知しない。

それは同じ投稿内で2回呼ぶことはできないし、同じ日付の投稿についても使えない可能性があることを示している。

端的に言おう。the_date関数は使わないほうがいい。開発時期を見ても明白だ。get_the_date関数を使おう。

この記事を書き終えた頃、WordPress Codexを見直した。そこにはこう書かれていた。

同じ日で公開の記事の日付を繰り返すには、日付固有の形式の文字列でテンプレートタグthe_time() または(3.0以降)get_the_date()を使用する必要があります。

そう、上記の調査はこの一行に全て集約されていたのだ。

きちんとマニュアルは読もう。今日の出来事はたったそれだけのことだったのだ。