【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