WordPressの公開日時には「秒」が隠れている

公開日時は「分」までしか指定できませんが、データ的には隠れた「秒」まで持っています。
「2019/9/1 00:00」と設定しても、実際は「2019/9/1 00:00:39」とか半端な日時で保存されるのです。

即時公開の場合はこれでもまぁいいでしょうが、予約公開の場合はちょっと問題が出てくることがあります。
「2019/9/1 00:00」で予約公開しても、まず間違いなく秒が加算されているので、「2019/9/1 00:00:00」ジャストにアクセスしても公開されていません。

最大で1分の遅延が発生するので、情報管理がシビアなコンテンツの予約公開においては問題になるかもしれません。

で、これを回避する方法

以下のコードを functions.php とかに記述すればOK
隠れた秒をジャスト「00」に設定します。

めでたし

add_action( 'transition_post_status', array($this, 'save_future'), 1 ,6);

function save_future( $new_status, $old_status, $post ) {
	if ($new_status === 'future' && $old_status !== 'future') {
		$post_id = $post->ID;
		do_action('save_post', $post_id, $post);
		$post_date = $post->post_date;
		$post_date = date("Y-m-d H:i:00", strtotime($post_date));
		$post_date_gmt = $post->post_date_gmt;
		$post_date_gmt = date("Y-m-d H:i:00", strtotime($post_date_gmt));
		$post_val = array(
				'ID'            => $post_id,
				'post_date'     => $post_date,
				'post_date_gmt' => $post_date_gmt,
		);
		wp_update_post( $post_val );
	}
	return;
}

コメントを残す