WordPressを触り始めたばかりですが、せっかく設定変更を自由に行えるのですから、色々と凝りたいのが人の性というもの。まだテーマ自体作成途上とはいえ、早速末梢的なことに凝ってしまいました。今回の変更対象は、投稿日です。
投稿日を表示するthe_date()をそのまま呼ぶと何とも味気ない表示になりますので、中央揃えした矩形の中に年月日を思い思いに配列することにしました。結果はご覧の通りなのですが、それなりに躓きそうな点があったので、備忘録として書いておきます。
投稿日全体を「年月日」等として扱うのであれば、単にthe_dateに適当な引数を与えて所望の文字列を得て、それらを全体としてスタイル付けすれば済みます。ところが、年月日それぞれを別の数字として得て、それらのそれぞれに異なったスタイル付けをしようとすると、以下の点に引っ掛かります。
すなわち、ループ中でのthe_date()は、同一の投稿日を返す場合、表示されないという仕様です。
この仕様は、単独ページ(single.php)以外のアーカイブページ(例えばindex.php)の存在を考えた場合、理に適っています。ループする度に年月日が表示されると、同一年月日で複数記事を投稿した場合、記事毎に年月日が表示されてしまい、冗長になります。このため、「whileのループに1つ記述されたthe_date()で年月日に差分がない」ということは、「the_date()をいくつも記述しても年月日に差分がない」ことと同義となります。
ではどうするか。「the_time()であれば何度使っても大丈夫」などというその場しのぎ的な発想は、技術者としてはあまりぞっとしない小手先の対策ですよね。コードが美しくないですし、何より美しくないコードは性能を劣化させます。
そこで、年月日をそれぞれ別の値として取り扱うべく、以下のように記述しました。以下のコードが美しいのかどうかはさて措いて、少なくともthe_time()を何度も呼ばなくて済むことだけは確かです。
<?php
$Ynj = split('/', the_date('Y/n/j', '', '', 0) );
if ($Ynj[0] != '') {
echo "tt",
'<div class="dato">',
'<div class="dato_yyyy">', $Ynj[0], '</div>',
'<div class="dato_mm">', $Ynj[1], '</div>',
'<div class="dato_dd">', $Ynj[2], '</div>',
'</div>';
}
?>
このように、PHPのお好みのdateフォーマットを得るところまでは同じで、適当に書いたデリミタ(セパレータ)を仕込んでおき、それをsplitして配列に突っ込むという愚直な方法です。なお、ifを使わないと、年月日の中身がないままに外側のdiv要素(class=”dato”)がループの度に表示されてしまいます。
ハッシュ(連想配列)型を使った方が自己説明的なコードになるのでしょうが、再利用する箇所も特に見あたらなかったため、配列を用いています。
Perlについては業務で一通りは使える水準にあっても、PHPについては経験が浅かったのですが、同じP言語兄弟として新たに覚え直すことが少ないという利点を活かせました。
「車輪の再発明」ということすら(語の「発明」という重さゆえに)おこがましいコードですが、願わくは後続の有志の助けとならんことを……。