0
0

WordPressで"◯日以内に投稿された記事かどうか"の関数を作るモダンな方法

Last updated at Posted at 2023-12-08

結論

下記コードをコピペして関数名に適当なプレフィックスを追加して使えばいい。

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
上記コードはそれに素直に対応したコードです。

  1. ただしDateTimeInterface::diff()は夏時間が絡むと意図しない挙動になり得る可能性が想定されています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0