結論
下記コードをコピペして関数名に適当なプレフィックスを追加して使えばいい。
function is_recently_post( int $days = 7, ?WP_Post $post = null): bool {
/** @var DateTimeImmutable|false */
$post_time = get_post_datetime( $post );
if (false === $post_time) {
return false;
}
$days_difference = $post_time->diff(current_datetime());
return $days_difference->days <= $days;
}
理由
公式サイトで"これからの実装にget_the_date('U')やcurrent_time('U')を使うな"と書いてあるから
これで終わりでもいいんですがもう少し説明します。
get_the_date('U')
やcurrent_time('U')
で取得できる値はWordPressタイムスタンプと呼ばれるものです。
この値はタイムゾーン対応が環境依存になっており、処理が安定しないことになってしまいました。
そのため、WP5.3以降はUnixタイムスタンプ同士での比較にするか、DateTimeInterface::diff()でタイムゾーンを合わせて比較することを推奨されています1。
上記コードはそれに素直に対応したコードです。
-
ただしDateTimeInterface::diff()は夏時間が絡むと意図しない挙動になり得る可能性が想定されています。 ↩