ACFで公開日を指定

GTP

こちらも参照

概要

  • スタート(固定ページ:フロントエンド新規作成&管理者用アーカイブ):
    • フロントエンドから新規投稿を作成(下書きdraft)
    • OKボタンをクリック=下書きdraft状態の投稿が完成
    • 管理者用アーカイブのドラフト一覧から該当する投稿draftを開く
  • 内容を編集、確認して①すぐに公開②予約投稿
    1. ACF-stetasで公開publishを選んでOKボタン
    2. ACF-stetasはdraftのまま、ACF日時ピッカーで公開日を指定。指定日時になれば投稿を公開。
  • OKボタンをクリック
  • OKボタンが押された際のバックエンド動作
    • ACF-stetasの指定に合わせてWPステータスを切り替え
    • ACF-stetasがpublishの場合はACF日時ピッカーの値を削除
  • バックエンドで動くスケジュールイベント
    • WP-Cron
    • WordPressで時間ベースのタスクをスケジュール
    • 毎時00分に確認
    • イベントフック処理
  •  指定公開日までは
    • アーカイブ非表示(あたりまえなのでfunctionsコードカット)
    • ロボット検索対象外設定(あたりまえなのでfunctionsコードカット)
  • 公開する処理
    • 対象:投稿draftであり、ACF-stetasの値がdraft&ACF日時ピッカー値が
    • ‘post_status’ => ‘publish’:WPステータスを公開にする
    • ACF-stetasの値を公開publishに変更する
    • ACFピッカー値をクリアする
  •  公開後は
    • アーカイブ表示
    • ロボット検索対象

ポイント

WPステータスは基本的にACFの値を元にして動く

WordPressの日時フォーマット:Y-m-d H:i:s

公開トリガー

  • wp_schedule_event() によって「現在時刻」と「ACF指定公開日時」の比較チェック
  • 現在時刻が公開日時以上=投稿が公開(ステータス変更publish)

仕組みの流れ

  1. ACFで公開日を指定する日時ピッカー、scheduled_publish_date を作成
  2. 投稿にACF日時ピッカー(scheduled_publish_date)を結びつけ
  3. 投稿画面でACF日時ピッカーを入力して公開日時を指定
    • 公開日時まではステータスが下書き(draft)となる
    • 公開日時まではアーカイブ非表示&ロボット検索回避
  4. 公開日時と現在日時が一致すると投稿は公開
    • wp_schedule_event() で毎時スケジュールチェック
      • 公開条件が成立した場合に処理
    • 投稿のステータス変更=公開(publish)
    • 投稿の投稿日をACF日時ピッカー指定した公開日時に書き換え
    • アーカイブ表示&ロボット検索対象

 

フロントエンドからの予約投稿について

フロントエンドの予約投稿は次の理由で断念

  • 予約投稿はステータスと日付からなる
  • ACFから制御するうえで次の2つのフィールドを作成
  • ラジオボタン
    • status:publish、draft、future
      • publish:公開
      • draft:下書き
      • future:予約投稿
  • 日時選択ツール
    • scheduled_date:カレンダ式
  • WPの日時選択は年月日時間を設定=作成日を設定する
  • 作成日を設定を未来日時に設定することで予約投稿となる
  • 下書き状態で日時選択から未来日時設定可能。
    • その場合に投稿管理画面での
    • ステータスは下書きとなる
    • 更新ボタン表示は予約投稿となる
    • 管理画面の一覧表示でのステータスは下書きとなる
  • 上記の予約投稿と日時選択、下書きとの相関関係と仕組みがわかるまでは動作の組み立ては困難
  • 従って当面はフロントエンドからのステータス制御を公開と下書きのみに限定する
  • ※今後の研究項目