WordPressの「公開」メタボックスに更新日時を表示する

WordPressの投稿編集画面(Classic Editor)の「公開」メタボックスには、投稿日は表示されますが、更新日時を表示する項目は標準では用意されていません。記事をいつ最後に更新したかを編集画面ですぐ確認したい——そんなときに使えるのが post_submitbox_misc_actions フックです。

この記事では、投稿日のすぐ下に更新日時を表示する方法と、他プラグインと表示順で衝突しないための小さなコツを紹介します。

完成イメージ

ステータス: 公開済み
公開範囲: 公開
投稿日: 2022年11月30日 12:17
🕐 更新日時: 2026年7月8日 09:45   ← これを追加
□ 修正日を更新しない

実装コード

functions.php(または読み込まれる機能ファイル)に以下を追加します。

/**
 * 「公開」メタボックスの投稿日の下に更新日時を表示する
 */
function my_show_modified_in_submitbox($post = null)
{
    // WP 4.4 未満などで $post が渡らない場合のフォールバック
    if (!$post) {
        $post = get_post();
    }

    // 対象の投稿タイプに限定(不要なら丸ごと削除してもよい)
    if (!is_object($post) || $post->post_type !== 'post') {
        return;
    }

    // 新規作成(未保存)は投稿日と同じで意味がないため表示しない
    if ($post->post_status === 'auto-draft') {
        return;
    }

    // ロケールに沿った日時(第4引数 true で date_i18n 相当の整形)
    $modified = get_post_modified_time('Y年n月j日 H:i', false, $post, true);
    ?>
    <div class="misc-pub-section misc-pub-modified">
        <span class="dashicons dashicons-clock" style="color:#82878c;"></span>
        更新日時: <b><?php echo esc_html($modified); ?></b>
    </div>
    <?php
}
add_action('post_submitbox_misc_actions', 'my_show_modified_in_submitbox', 9);

たったこれだけです。ポイントを順に解説します。

解説

1. post_submitbox_misc_actions フック

「公開」メタボックス内の、ステータス・公開範囲・投稿日といった項目が並ぶエリア(.misc-pub-section の集まり)の末尾に出力を追加するためのアクションフックです。WordPress 4.4 以降は、コールバックに現在の投稿オブジェクト $post が渡されます。

コア標準の項目(投稿日など)はこのフックより前に描画されるため、ここで出力したものは自然と「投稿日の下」に表示されます。

2. 投稿タイプで絞り込む

if (!is_object($post) || $post->post_type !== 'post') {
    return;
}

特定の投稿タイプ(例では通常投稿 post、カスタム投稿タイプなら 'course' など)だけに出したい場合はこの判定を入れます。全投稿タイプで表示したいなら、このブロックごと削除すればOKです。

3. 未保存の新規記事は除外する

if ($post->post_status === 'auto-draft') {
    return;
}

新規追加直後の記事は auto-draft ステータスで、更新日=作成時刻となり意味がありません。ノイズを避けるために除外しています。

4. get_post_modified_time でロケール整形

$modified = get_post_modified_time('Y年n月j日 H:i', false, $post, true);

更新日時の取得には get_post_modified_time() を使います。引数は次の通りです。

引数意味
第1'Y年n月j日 H:i'フォーマット(投稿日と揃えると自然)
第2falseGMTではなくサイトのタイムゾーンで取得
第3$post対象の投稿
第4truedate_i18n 相当で整形(多言語・ロケール対応)

第4引数を true にするのがポイントで、これで日本語ロケールの整形が効きます。

5. priority で他プラグインとの表示順を制御する

post_submitbox_misc_actions は多くのプラグインも利用します。たとえば All in One SEO(AIOSEO) は「修正日を更新しない」チェックボックスを、このフックの優先度10(デフォルト)で追加します。

add_action('post_submitbox_misc_actions', 'my_show_modified_in_submitbox', 9);

そこで自作コードを優先度9で登録すると、AIOSEOのチェックボックスより先に描画され、「投稿日 → 更新日時 → 修正日を更新しない」という自然な並びになります。表示位置が思った通りにならないときは、この優先度の数字を調整してみてください(小さいほど先に描画)。

応用

  • フォーマットを変えたい'Y-m-d H:i:s''Y/n/j G:i' など、get_post_modified_time() の第1引数を好みの日付フォーマットに。
  • 相対表示にしたいhuman_time_diff() を使えば「3時間前」のような表示も可能です。
$diff = human_time_diff(get_post_modified_time('U', true, $post), current_time('timestamp', true));
echo esc_html($diff . '前');
  • アイコンを変えたいdashicons-clock を他の Dashicons に差し替え。

まとめ

  • 更新日時の値(post_modified)は「更新」ボタンを押すたびに自動で記録されている。表示するだけならフック1つで完結する。
  • post_submitbox_misc_actions で投稿日の下に追加できる。
  • get_post_modified_time(..., true) でロケール整形。
  • 他プラグインと並びが競合したら priority で調整する。

編集画面で更新日時がひと目で分かるようになると、記事のメンテナンス状況の把握がぐっと楽になります。

コメント

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