タグアーカイブ カレンダー

Beacon Eventsで開始日時と終了日時が保存されない時の直し方

Beacon Eventsで開始日時と終了日時が保存されない時の直し方

Beacon Eventsでイベントの開始日時・終了日時を入力しても保存されず、カレンダーに表示されない場合は、日時フィールドが途中までしか入力されておらず、ブラウザが値を未入力と判定している。最新版(0.27.0)に更新し、開始日時と終了日時を完全な形で入れ直すと解消する。

なぜ開始日時と終了日時が保存されないのか

なぜ開始日時と終了日時が保存されないのか

編集画面の日時入力欄に値が表示されていても、データベースの wp_postmeta で _beacon_start と _beacon_end が空のままなら、入力欄の値が完了していない。ブラウザの日時入力は、日付と時刻のすべての部品が揃わないと、画面上の見た目にかかわらず入力値そのものを空として扱う。

具体的には、日付は入力したが時刻の一部(午前・午後の指定など)が未完了の場合や、カレンダーで日にちだけ選んで時刻を選ばなかった場合が当てはまる。途中まで入力されたフィールドには未設定部分に記号やプレースホルダーが表示されるため、完了しているように見えてしまう。

さらに、すでに入力済みの時刻を書き換えた直後は、フィールド全体が一時的に空になることがある。このタイミングで更新ボタンを押すと、日時を空のまま保存してしまい、イベントがカレンダーに出なくなる。Beacon Eventsの旧バージョン(0.18.2より前)は、この未完了状態をチェックせずに保存できたため、入力したはずの日時だけが失われる。

保存されない入力状態(Before)
日付と時刻が途中まで入力されたまま更新ボタンを押す
↓
保存される入力状態(After)
日付と時刻の最後の項目まで入力してから更新ボタンを押す
■ 未完成の入力 ■ 完成した入力

保存ボタンを押す前に、日付と時刻の最後の項目まで入力が完了しているかどうかが保存可否を分ける。

Beacon Eventsを最新版へ更新して保存処理を修正する

Beacon Eventsを最新版へ更新して保存処理を修正する

旧バージョンでは日時の入力を未完了のまま更新できてしまうが、新版では保存前に入力ミスを表示し、未完了のまま更新できないように改善されている。まずBeacon Eventsを0.27.0へ更新する。

  1. WordPress管理画面の「ダッシュボード」→「更新」を開く
  2. 更新対象の一覧にBeacon Eventsが出ていることを確認する
  3. チェックボックスをオンにして「プラグインを更新」を押す
  4. 更新後、イベント編集画面を開きなおして表示が変わっていることを確認する

更新後に表示される警告とイベント一覧の表記

新しいBeacon Eventsは、日時フィールドが未完成の状態だと入力欄の下に未保存の表示を出し、更新ボタンを無効化する。また、イベント一覧では開始日時を持たない記事に対して「開始日時なし(英語表示ではNo start date)」のように表示し、カレンダーに載らない理由がひと目でわかる。

保存されていない既存イベントの開始日時と終了日時を入れ直す

保存されていない既存イベントの開始日時と終了日時を入れ直す

更新後、旧バージョンで日時が抜けたままのイベントは自動修正されない。イベント一覧から対象を見つけて、開始日時と終了日時を入れ直す必要がある。

STEP 1 イベント一覧を開いて対象を探す
↓
STEP 2 「開始日時なし」と表示されたイベントを編集する
↓
STEP 3 開始日時と終了日時を最後の項目まで入力する
↓
STEP 4 更新ボタンを押して保存し、イベント一覧に反映されたことを確認する

日時の入れ直しは、各イベントを開いて保存しなおすだけで済む。

イベント一覧で開始日時が空の記事を特定する

Beacon Eventsは開始日時を持たないイベントを一覧上で明示するため、その表示を目印に対象を選ぶ。英語表示のままの場合は「No start date」というラベルを探す。

入力の途中で保存しないための注意点

日時フィールドは日付部分と時刻部分が揃うまで入力を完了させる。特に時刻を編集した直後は一瞬値が空になるため、更新ボタンを押す前にフィールド全体が確定表示になっていることを確認する。

REST APIとwp_postmetaで保存状況を確認する

REST APIとwp_postmetaで保存状況を確認する

日時が保存されているかは、REST APIのレスポンスかデータベースの wp_postmeta テーブルで確認できる。REST APIの場合、ブラウザで次のURLにアクセスし、該当イベントのメタフィールドを確認する。

/wp-json/wp/v2/(イベント投稿タイプ)/(投稿ID)

レスポンスの meta セクションは次のようになっている。

{
  "id": 123,
  "meta": {
    "_beacon_start": "",
    "_beacon_end": ""
  }
}

ここで _beacon_start と _beacon_end が空文字列なら、イベントの開始日時と終了日時はまだ保存されていない。REST APIで確認すると、表示上の入力状態と実際の保存状態を切り分けられる。

直接wp_postmetaを書き換える方法は最終手段

旧バージョンでの回避策として wp_postmeta を直接更新する方法があるが、保存形式を誤るとカレンダーが日時を正しく解釈できなくなる。管理画面から入力しなおす方が安全だ。

同じ問題を再発させないための確認ポイント

同じ問題を再発させないための確認ポイント
  • 開始日時と終了日時は日付と時刻の最後の項目まで入力し終えてから更新する
  • 入力欄の下に未保存の警告が出ている場合は更新ボタンを押さない
  • 保存後はイベント一覧で開始日時が表示されているか確認する
  • Beacon Eventsは常に最新版へ更新しておく

よくある質問

日時の入力欄に表示されているのに保存されないのはなぜですか?

日時の途中までしか入力されていないと、ブラウザは見た目の表示にかかわらず入力欄全体を空の値として扱います。午前・午後の指定や時刻の最終桁を設定しないまま更新すると、データベースには何も書き込まれません。

保存されなかったイベントはどのバージョンから修正されますか?

入力が未完了のまま保存できた問題は0.18.1と0.18.2で修正されています。その後も改善が続いており、本記事執筆時点の最新版は0.27.0です。このバージョン以降に更新して日時を入れ直せば保存されます。

REST APIで _beacon_startと _beacon_endが空か確認する方法は?

該当するイベントのREST APIレスポンスのmetaフィールドを確認します。_beacon_startと _beacon_endが空文字列なら開始日時と終了日時は未保存です。表示上は入力されていても保存されていない状態を特定できます。

最新版に更新しても日時が保存されない場合はどうすればいいですか?

まず日時を最後の項目まで入力しているかを確認します。それでも保存できない場合は、テーマや他のプラグインとの競合が考えられます。標準テーマに切り替え、他のプラグインを一時的に無効化して切り分けます。

保存されていないイベントが大量にある場合はどう直せばいいですか?

管理画面で1件ずつ開いて入れ直すのが最も安全です。どうしても大量の件数を一括で直す必要がある場合は、REST APIで正しい日時情報を送る方法もありますが、保存形式に合わせた値を指定する必要があります。

この記事のポイント

  • Beacon Eventsで日時が保存されない主因は、日時入力が未完了のまま更新ボタンを押すこと
  • 未完了の日時はブラウザが空の値として扱い、wp_postmetaの _beacon_startと _beacon_endに何も書き込まれない
  • 最新版(0.27.0)に更新すると、未保存の表示と更新ボタンの制御で同じ操作を防げる
  • 旧バージョンで日時が抜けたイベントは、1件ずつ開いて日時を入れ直す
  • 保存状況はREST APIのmetaフィールドで確認できる