投稿日を和暦に変換する方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

はじめに

WordPressの標準機能では日付は西暦で表示されますが、日本国内向けのサイトや公的な内容を扱うブログでは、和暦(令和・平成など)で表示したいケースがあります。

この変換には、PHPに標準搭載されているIntlDateFormatter(国際化用日付フォーマッター)というライブラリを使用し日付を変換します。

この記事では、この方法について説明します。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('get_the_time', function ($the_time, $format, $post) {
  if (is_admin() || !$post) {
    return $the_time;
  }

  $post_obj = get_post($post);
  if (!$post_obj || empty($post_obj->post_date)) {
    return $the_time;
  }

  // 和暦フォーマットの設定
  $formatter = new IntlDateFormatter(
    'ja_JP@calendar=japanese',          // ロケールとカレンダーの種類
    IntlDateFormatter::FULL,            // 日付スタイル
    IntlDateFormatter::NONE,            // 時刻スタイル
    'Asia/Tokyo',                       // タイムゾーン
    IntlDateFormatter::TRADITIONAL,     // 暦の種類
    'Gy年M月d日'                        // 出力形式(G: 元号, y: 年)
  );

  // DateTimeオブジェクトを作成して和暦に変換
  $date_obj = new DateTime($post_obj->post_date);
  $japanese_date = $formatter->format($date_obj);

  return $japanese_date ?: $the_time;
}, 99, 3);

さいごに

今回紹介した方法を使えば、PHPの標準機能を活用して、テーマ内の日付表示を一括で和暦に変更できます。
自前で元号の計算ロジックを書く必要がないため、保守性が高く、将来新しい元号に変わった際もサーバー側のPHPが更新されれば自動で対応できるのが大きなメリットです。

タイトルとURLをコピーしました