#093
posted on 2023.10.10 (Tue)

WordPressで記事の投稿日からの経過日数で表示を変える方法。

CATEGORY

WordPressで記事を公開してからの経過日数で表示を変えたかったので、現在時刻と投稿日を比較して、任意の日数を経過しているかで条件判定する方法のメモ。

※ 時刻を扱うために必要な「UTC」(協定世界時)などの基礎知識は前の記事を参照。

 

 

WordPressで投稿日と現在時刻を比較して判定する方法

WordPressで日付などを扱う場合、通常のPHPの関数を使用すると「UTC」で返ってくるので、必ずWordPressの組み込み関数を使用する。

 

[ 記事投稿から「7日」経過しているかを判定する例 ]

  1. 分岐判定したい「経過日数」を秒数で設定。(ここでは「7日」で判定。)
  2. 「現在時刻のタイムスタンプ」を取得。
  3. 「投稿時刻のタイムスタンプ」を取得。
  4. 「現在時刻のタイムスタンプ」と「投稿時刻のタイムスタンプ」の差と、設定した「経過日数」を比較して分岐処理。
//判定する日数
$ag2period = 60*60*24*7;

//現在時刻のタイムスタンプを取得
$ag2current_datetimestamp = current_datetime()->getTimestamp();
//投稿時刻のタイムスタンプを取得
$ag2post_timestamp = get_post_timestamp();

//指定した日数を経過しているか判定して分岐
if($ag2current_datetimestamp - $ag2post_timestamp < $ag2period){
 // 7日未満の場合の処理...
}else{
 // 7日以上の場合の処理...
}

//更新日のタイムスタンプを取得したい場合
$ag2post_modified_timestamp = get_post_timestamp($post->id,'modified');

current_datetime() : WordPressの組み込み関数。WordPressで設定されているタイムゾーンでの現在時刻のDateTimeImmutableオブジェクトを返す。

get_post_timestamp(‘Post IDかPostオブジェクト’, ‘公開日か更新日’) : WordPressの組み込み関数。指定した投稿の公開日(または更新日)のタイムスタンプを返す。第1引数を省略した場合は「global $post object」が使用される。第2引数は既定値の「’date’」(公開日)か、「’modified’」(更新日)を指定できる。

 

 

WordPress以外で実装する場合

WordPressではないサイトで実装する方法。(通常のPHPで実装する方法。)

 

PHPの「DateTimeImmutable」クラスを使用して、指定した時刻のタイムスタンプを取得して比較する。

  1. 分岐判定したい「経過日数」を秒数で設定。(ここでは「7日」で判定。)
  2. 「現在時刻のタイムスタンプ」を取得。
  3. 「対象時刻のタイムスタンプ」を取得。
  4. 「現在時刻のタイムスタンプ」と「対象時刻のタイムスタンプ」の差と、設定した「経過日数」を比較して分岐処理。

※ 「DateTimeImmutable」クラスは、「DateTime」クラスとほぼ同じだが、「modify()」メソッドなどを使用しても元のオブジェクトが上書き変更されないという違いがある。

※ 「DateTimeImmutable」クラスのPHPの公式ドキュメント

//判定する日数
$ag2period = 60*60*24*7;

//現在時刻のDateTimeImmutableオブジェクトを生成
$ag2current_date = new DateTimeImmutable();
//現在時刻のタイムスタンプを取得
$ag2current_timestamp = $ag2current_date->getTimestamp();

//比較対象の日付
$ag2date = '2023-01-01 12:00:00';
//比較対象のDateTimeImmutableオブジェクトを生成
$ag2target_date = new DateTimeImmutable($ag2date);
//比較対象のタイムスタンプを取得
$ag2target_timestamp = $ag2target_date->getTimestamp();

//指定した日数を経過しているか判定して分岐
if($ag2current_timestamp - $ag2target_timestamp < $ag2period){
 // 7日未満の場合の処理...
}else{
 // 7日以上の場合の処理...
}

 

「DateTimeImmutable」クラスは「DateTimeInterface」インターフェイスで実装されているので、「diff()」メソッドを使用して、2つの日付の差を表す「DateInterval」オブジェクトを取得し、差分を任意にフォーマットして出力することができる。

※ 使用できるフォーマットは、「DateInterval::format」のPHPの公式ドキュメントを参照。

//差分の「DateInterval」オブジェクトを取得
$ag2diff = $ag2target_date->diff($ag2current_date);
//フォーマットして出力
echo $ag2diff->format('%d日%h時間%i分%s秒');
この記事のURL

https://memo.ag2works.tokyo/post-5703/

Copyコピー
この記事のタイトル

WordPressで記事の投稿日からの経過日数で表示を変える方法。 | memo メモ [AG2WORKS]

Copyコピー
この記事のリンクタグ

<a href="https://memo.ag2works.tokyo/post-5703/" target="_blank" rel="noopener">WordPressで記事の投稿日からの経過日数で表示を変える方法。 | memo メモ [AG2WORKS]</a>

Copyコピー
※ フィールドをクリックでコピーするテキストの編集ができます。

この記事へのコメント

コメントの書き込みはまだありません。

  • コメント内のタグはエスケープ処理され、文字列として出力されます。
  • セキュリティーのため、投稿者のIPアドレスは取得されます。
  • 管理者が内容を不適切と判断したコメントは削除されます。
  • このフォームにはスパム対策として、Googleの提供するreCAPTCHAシステムが導入されています。
    (Google Privacy Policy and Terms of Service.)