【WordPress】目に入ってくるのは自分にとって都合の良い情報ですね。
今回は自戒の記事です。結論から言うと。
「リファレンスを読むときは、自分に都合の良い情報だけでなく、関連する情報もしっかりと読みましょう。」
と深く思いました。
週間スケジュール表を作っていた時のこと
前もって登録されたスケジュールデータを使って、チェックリストを作ろうと思い。
せっかくなら2週間分のスケジュール表を作ろうと考えました。
ワードプレスでスケジュール用のカスタム投稿を用意したり。
日付の自動入力を設定したり。
データの準備を進め、とりあえず表示できるだけのデータが集まったので実際に作成。
アクセス日をもとに動的な表示にしようと考えました。
スケジュール自体の登録は毎週末に翌週分を登録する形にしたので、アクセスした当日から表示するとスケジュールの無い暇な人になってしまいます。
なので、アクセス日を含む週の月曜から日曜を今週として表示し、アクセス日の翌週を次週分として表示することに。
タイトルに【WordPress】と入れているのでざっくりとコードでも。
<?php
//当日日付の取得処理
date_default_timezone_set( 'Asia/Tokyo' );
$start_date = new DateTimeImmutable();
//クエリを作成
$args = array(
'post_type' => 'private-schedule',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_value' => $start_date->format( 'Y/m/d' ),
);
//データとして扱うので、get_posts()で使用する
$private_schedule = get_posts( $args );
?>
まずはアクセス日を取得したいので、DateTimeImmutable()を使います。
週間スケジュールの日付を表示する元になる情報なので、中身が変わらないようにこちらを。
あとは、カスタムフィールド内の日付を検索し、該当する投稿を絞り込み。
投稿データを使用できるように、get_posts()を利用します。
翌週分は別でサブクエリを作成し、’meta_value’の検索値を$start_date->modify('+7 day’)->format('Y/m/d’)に変更してます。
ここまでは順調でした。
日付の表示に悩む
クエリから取得した各投稿には、今週に該当する日付が入っています。
配列で取得して、重複を除去して〜とも思いましたが、無駄だなぁと。
でもせっかく取得してるしなぁと。
グネグネ考えてましたが、よく考えたらアクセス日の日付も取得してます。
で、そのアクセス日をもとに投稿データを検索しているので、その投稿データの月曜日はアクセス日の週の月曜日だよねと。
よっぽどのことがなければ世界のカレンダーに変更が起きることはないと思うので、DateTimeImmutable()で取得しているアクセス日にmodifyを使用すれば良いか!
と考えつきました。
鼻息混じりにまずは月曜日を取得してみます。月曜始まりのスケジュール表なので、月曜を基準にしたいのです。
$start_date->modify( 'Monday' )->format( 'Y/m/d' );
これで表示されたのは、翌週の月曜日。
・・・曜日のみの指定だと、翌週になるのかと思い。
今週を取得する形式は・・・とリファレンスを見ました。見たんですよ。
ここが今回の最大のテーマで、この時はこの曜日指定の方法しか目に入って来ませんでした。
たぶん・・・上記のことを無駄に考えすぎて疲れてたんですかねー。
なんかおかしいと思いつつ、だったら脳筋で行こうとここからコードを追加することに。
しかも、アクセス日と月曜日が同じ日だと先週の月曜になってしまうので、そこら辺でも条件分岐を。
if( $start_date->format( 'l' ) == 'Monday' ){
//アクセス日=月曜日だったら
$this_week_monday = $start_date;
echo $this_week_monday->format( 'Y/m/d' );
} else {
//アクセス日=月曜日じゃなければ
$this_week_monday = $start_date->modify( 'Monday' );
echo $this_week_monday->format( 'Y/m/d' );
}
これで予定どおりに表示され、あとの日付は+1dayとかで済ませてました。
が。
なんかしっくり来ませんし、自分で変数を決めておいてなんですがthis_weekに聞き覚えがあってですね。
一通り表の形を作った後に、もう一度形式を調べようとリファレンスを再び開いたら。
その一つ下に書いてありました。
'Monday this week’のフォーマットが。
'〇〇 this week’で今週の◯曜日。’〇〇 next week’で翌週の◯曜日。
いやー。頭の中がMondayで一杯で、見事に見逃してましたが。
でも一つ下は・・・ない。
なんで、1行で表現できました。・・・まぁ良かったです。
$this_week_monday = $start_date->modify( "Monday this week" );
echo $this_week_monday->format( 'Y/m/d' );
情報収集は慎重に
ということで。1スクロール下ならまだ見逃した事を納得できるんですが。
まさかの1段下というものすごく近いところを見落として、無駄なコードを書いてしまったという自戒の記事です。
もったいないなぁと思いつつ、頭の中が指定の’Monday’しかなかったので、都合の良い単語だけが頭に入って納得してしまったのかなぁとか。
かなり間抜けなミスだったので、これで供養したいと思いますw