obara

【WordPress】未来投稿機能を無効にする方法

WordPressには、公開日を未来に設定することで設定日に記事を公開する機能があります。
当日の○時に公開しなければいけない!というときはとても便利な機能ですね。

ただし、イベントの開催日として記事の公開日を未来の日付に設定した場合は、
デフォルトの状態では設定した当日まで記事が公開されないので、
未来投稿機能自体を無効にしたい場合があります。

そんなときは、functions.phpに

function stop_post_status_future_func( $data, $postarr ) {
 if ( $data['post_status'] == 'future' && $postarr['post_status'] == 'publish' ) {
       $data['post_status'] = 'publish';
   }
   return $data;
};
add_filter( 'wp_insert_post_data', 'stop_post_status_future_func', 10, 2 );

上記コードを追記するだけで、投稿、固定ページ、カスタム投稿タイプの全てで未来投稿機能が無効になります。
・・・が、全ての投稿タイプで未来投稿が出来なくなると困ることもありますよね?

例えば、サイトが

  • 新しいお知らせ(news)※投稿
  • イベント開催予定(event_info)※カスタム投稿

という構成だった場合に、

  • 「イベント開催予定」の公開日は未来に設定して、記事を公開した時点でアクセスできるようにしたい。
  • 「新しいお知らせ」は○月×日の24:00ピッタリに公開したい。

こういった要望を同時に叶える場合は、
「イベント開催予定」のみ未来投稿機能を無効にすればよい、ということになります。

【「イベント開催予定」のみ未来投稿が無効になるコード】

function stop_post_status_future_func( $data, $postarr ) {
   if ( ( $data['post_type'] == 'event_info' && $data['post_status'] == 'future') && $postarr['post_status'] == 'publish' ) :
      $data['post_status'] = 'publish';
   endif;
  return $data;
};
add_filter( 'wp_insert_post_data', 'stop_post_status_future_func', 10, 2 );

上記コードで、カスタム投稿タイプ「event_info」で未来の日付で投稿した場合、
記事が即時公開状態になります。

$data['post_type']

上記変数部分で投稿タイプを決めているので、'event_info'を'post'に変えれば、
通常の「投稿」以外が未来投稿可能になります。

逆に、「event_info」のみ未来投稿機能を有効にしたい場合は、if文の記述のうち

$data['post_type'] == 'event_info'

$data['post_type'] != 'event_info'

に変更すれば可能です。

お問い合わせはこちら