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 プラグインで 下書き予約が設定されているか確認します。
「Cron イベント」のカスタムイベントに my_save_expire が表示され、次回実行の日時が指定のカスタムフィールドの日付(の翌日)00:00:00 になっていれば成功。
コメント