カスタムフィールドに設定した日付が前日以前になったらカテゴリーを自動変更する方法

カスタムフィールドに設定した日付が前日以前になったらカテゴリーを自動変更する方法

カスタムフィールドに設定した日付が前日以前になったらカテゴリーを自動変更する方法

カスタムフィールドに入力している日付が、前日以前(過去の日付)になっていたら自動でカテゴリーを変更する方法をご紹介いたします。

イベント情報やセミナー情報を投稿しているサイトで、カテゴリーを自動で”開催終了”に変更したい場合などに活用できます。

カスタムフィールドに設定した日付が今日を過ぎていたらカテゴリーを自動変更する方法

日付を設定するためのカスタムフィールドは、Advanced Custom Fieldsを使って追加している前提です。Advanced Custom Fieldsの日付選択フィールドを使うと簡単です。

カスタムフィールドが設定できたら、適用しているテーマのfunctions.phpに以下を追加します。

//イベントをスケジュール
if (!wp_next_scheduled('event_end_check')) {
  //現在時刻のタイムスタンプを取得
  date_default_timezone_set('Asia/Tokyo');
  $current_time = strtotime(wp_date('Y/m/d H:i:s'));

  //翌日0時のタイムスタンプを格納
  $scheduled_time = strtotime('tomorrow 00:00:00', $current_time);

  //スケジュールをセット
  wp_schedule_event($scheduled_time, 'daily', 'event_end_check');
}

//スケジュールイベントから実行されるアクション
function do_event_end_check() {
  //現在日付のタイムスタンプを格納
  $today = strtotime(wp_date('Ymd'));

  //投稿を取得して内容を更新
  $args = array(
    'post_type' => '投稿タイプ名',
    'posts_per_page' => -1,
    'post_status' => 'publish',
  );
  $wp_query_event = new WP_Query($args);
  if ($wp_query_event->have_posts()) {
    while ($wp_query_event->have_posts()) {
      $wp_query_event->the_post();

      //カスタムフィールドの日付を取得してタイムスタンプを格納
      $event_end_date = strtotime(get_field('カスタムフィールド名'));

      //カスタムフィールドの日付が本日を超えていたらカテゴリーを変更
      if (!empty($event_end_date) && $event_end_date < $today) {
        wp_set_object_terms(get_the_ID(), 'ターム名', 'タクソノミー名');
      }
    }
  }
  wp_reset_postdata();
}
add_action('event_end_check', 'do_event_end_check');

「投稿タイプ名」「タクソノミー名」「ターム名」の部分は、環境に合わせて変更してください。

また、”event_end_check”や”do_event_end_check”などの関数名や$event_end_dateなどの変数名も気になる場合は適宜ご変更ください。

wp_schedule_eventによって毎日0:00にチェックが行われるようスケジュールされます。
※疑似cronを使うので厳密には0:00ちょうどにチェックされるわけではなく、0:00以降サイトにアクセスがあったタイミングで実行されます。

定期実行される「do_event_end_check」は、wp_dateで今日の日付を取得してカスタムフィールドの日付と比較し、カスタムフィールドの日付が前日以前になっていたらwp_set_object_termsでカテゴリー(タクソノミー)を変更するという挙動です。

あとがき

投稿数が多いサイトでは、WP_Queryの条件をもう少し絞った方が良いですね。

最近同じことをしたいという要望を立て続けにいただいたので、割と需要はあるかもしれません。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です