【WordPress】ACFの値で投稿記事を予約非公開(下書き)にする

  • URLをコピーしました!

Advanced Custom Fieldsで作成したカスタムフィールド(デイトピッカー)に入力した日付(の翌日に)投稿が自動的に下書きになるように設定します。

イベント開催日が記事に表示されており、開催日の翌日になったら記事が非表示(下書き)になるイメージです。

目次

実装

以下は、

  • 投稿タイプ event
  • デイトピッカーフィールド event_date

の時、設定した日付の翌日になったら投稿を下書きにするコードです。

//ACFの保存のタイミングで
add_action('acf/save_post', 'save_expire');
function save_expire($post_id)
{
    $post_type = get_post_type($post_id);
    //実施する投稿タイプを限定
    if ($post_type == 'event') {
        //event_date に値があれば
        if (get_field('event_date', $post_id)) {
            //ACFのevent_date の値をとってくる
            $event_date = get_field('event_date', $post_id);
            //20220814のような値を DateTimeオブジェクトに
            $date = new DateTime($event_date . ' 00:00:00 JST');
            //日付を翌日に変更
            $date->modify('+1 day');
            //タイムスタンプに変換
            $time_stamp = date_timestamp_get($date);
            //すでにスケジュールされているものがあれば削除
            wp_clear_scheduled_hook('my_save_expire',array($post_id));
            //タイムスタンプに応じて my_save_expire を実施するスケジュールを設定
            wp_schedule_single_event($time_stamp, 'my_save_expire', array($post_id));
        }
    }
}
//my_save_expire のアクション my_update_post を設定
add_action('my_save_expire', 'my_update_post');
function my_update_post($post_id)
{
    //投稿を下書きにする
    wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
}

動作確認

WP Crontrol プラグインで 下書き予約が設定されているか確認します。

WordPress.org 日本語
WP Crontrol WP Crontrol を使用すると、WordPress ウェブサイト上の cron イベントを制御できます。

「Cron イベント」のカスタムイベントに my_save_expire が表示され、次回実行の日時が指定のカスタムフィールドの日付(の翌日)00:00:00 になっていれば成功。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次