【WordPress】記事の公開日と最終更新日を表示する方法|timeタグ・更新日だけ出す条件分岐

【WordPress】記事の公開日と最終更新日を表示する方法 WordPress

記事に公開日と最終更新日を表示すると、読者に鮮度が伝わり、検索エンジンにも更新情報を正しく届けられます。ただし、ただ日付を文字で出すだけでは検索エンジンに「更新日」として伝わりません。この記事では、<time> タグを使った正しい表示と、実用的な条件分岐まで解説します。

この記事でわかること

  • <time> タグ(datetime属性)で正しく日付を出す
  • 更新日が公開日より新しいときだけ表示する条件分岐
  • the_timeget_the_date の使い分け
  • 日付フォーマットの変更・更新日を非表示にする
スポンサーリンク

公開日・更新日を time タグで表示する(推奨)

テンプレート(single.phpcontent.php など)に追加します。<time> タグの datetime 属性に機械可読な日付(ISO 8601形式)を入れ、タグの中に読者向けの日付を出すのが基本です。これで検索エンジンにも日付が正しく伝わります。

テンプレート:公開日と更新日をtimeタグで表示
<p>公開日:
  <time datetime="<?php echo esc_attr(get_the_date('c')); ?>">
    <?php echo esc_html(get_the_date('Y年n月j日')); ?>
  </time>
</p>

<p>更新日:
  <time datetime="<?php echo esc_attr(get_the_modified_date('c')); ?>">
    <?php echo esc_html(get_the_modified_date('Y年n月j日')); ?>
  </time>
</p>
the_time() ではなく get_the_date() を使う
the_time()the_modified_date()それ自体が出力する関数なので、echo the_time() のように echo を付けるのは誤りです。値を <time> の属性に埋め込むなど加工したい場合は、値を返す get_the_date() / get_the_modified_date() を使い、esc_html()esc_attr() でエスケープして出力します。datetime 属性の 'c' はISO 8601形式です。

更新日は「公開日より新しいときだけ」表示する

一度も更新していない記事では、公開日と更新日が同じになり、同じ日付が2つ並んで冗長になります。更新日が公開日より新しいときだけ更新日を出すと自然です。(軽微な修正で更新日が動くのを避けたい場合は、しきい値を1日ほど設けます。)

テンプレート:更新日が新しいときだけ表示
<p>公開日:
  <time datetime="<?php echo esc_attr(get_the_date('c')); ?>">
    <?php echo esc_html(get_the_date('Y年n月j日')); ?>
  </time>
</p>

<?php
// 更新が公開より1日以上あとなら更新日を表示
if (get_the_modified_time('U') > get_the_time('U') + DAY_IN_SECONDS) : ?>
  <p>更新日:
    <time datetime="<?php echo esc_attr(get_the_modified_date('c')); ?>">
      <?php echo esc_html(get_the_modified_date('Y年n月j日')); ?>
    </time>
  </p>
<?php endif; ?>

SEOと構造化データについて

本文のtimeタグ+JSON-LDの両輪
上記の <time> タグに itemprop="datePublished" / itemprop="dateModified" を付ければ、microdataとして日付を明示できます。さらに確実に伝えるなら、JSON-LDの構造化データdatePublisheddateModified を出力します。Yoast SEOやCocoonは自動出力しますが、自前で追加する場合はテーマにJSON-LD形式の構造化データを追加する方法を参照してください。

日付フォーマットの変更と、更新日の非表示

表示する日付の形式は、フォーマット文字列で自由に変えられます(Y/m/d2024/09/28Y年n月j日2024年9月28日)。管理画面の「設定 → 一般」で決めた既定フォーマットを使うなら、フォーマット引数を省略します。

日付フォーマットの例
echo esc_html(get_the_date('Y/m/d'));    // 2024/09/28
echo esc_html(get_the_date('Y年n月j日')); // 2024年9月28日
echo esc_html(get_the_date());           // 管理画面で設定した形式

更新日を表示したくない場合は、更新日側の <time> ブロックを置かず、公開日だけを出力すれば構いません。管理画面の投稿一覧に更新日を出して管理したい場合は管理画面の投稿一覧に最終更新日を表示しソート可能にする方法が便利です。

プラグイン・テーマ設定という選択肢も
コードを書きたくない場合は、WP Last Modified Info などのプラグインや、使用中のテーマ(Cocoon等)の設定で公開日・更新日の表示を切り替えられることがあります。まずはテーマの設定を確認し、細かく制御したいときにこの記事のコードを使うとよいでしょう。

よくある質問(FAQ)

Q公開日と更新日を両方出すと同じ日付が並んで冗長です。
A未更新の記事は公開日=更新日になります。if (get_the_modified_time('U') > get_the_time('U') + DAY_IN_SECONDS) のように、更新が公開より新しいときだけ更新日を出すと自然です。しきい値(DAY_IN_SECONDS)で軽微な修正を除外できます。
Q更新日を schema.org の dateModified として認識させるには?
A<time datetime="<?php echo esc_attr(get_the_modified_date('c')); ?>" itemprop="dateModified">…</time> のように itemprop を付けます。より確実にはJSON-LDで dateModified を出力します(JSON-LDの追加方法)。
Qthe_time() と get_the_date() はどちらを使うべきですか?
Aそのまま表示するだけなら the_time('Y/m/d') でも動きますが、<time> の属性に入れる・条件分岐で比較するなど値を扱う場合は、値を返す get_the_date() / get_the_modified_date() を使います。the_date() は同じ日付が連続すると2件目以降を出さない癖があるため、一覧では get_the_date() が無難です。

まとめ

  • 表示<time datetime="…('c')">get_the_date()get_the_modified_date()esc付き)
  • 更新日:公開日より新しいときだけ表示(DAY_IN_SECONDS でしきい値)
  • 関数:値を扱うなら get_the_*()echo the_*() は不要)
  • SEOitemprop やJSON-LDで dateModified を明示

プレーンテキストで出すだけでなく、<time> タグと条件分岐まで押さえると、読者にも検索エンジンにも伝わる日付表示になります。