WordPress管理画面の投稿一覧に「最終更新日」列を追加する方法【Cocoon子テーマ対応】

ワードプレスの管理画面に最終更新日を追加を表すアイキャッチ ブログ運営
本サイトはプロモーションが含まれています

WordPressの管理画面で投稿一覧を開くと、公開日は表示されていますが、最後にいつ更新したかは表示されていません。

記事を数十本、数百本と抱えるようになると、「この記事、最後に触ったのいつだっけ」という場面が増えます。リライトの優先順位を決めたいとき、公開日だけでは判断できません。

この記事では、Cocoon子テーマの functions.php にコードを追加して、投稿一覧に「最終更新日」という列を追加する方法を解説します。プラグインは使いません。WordPressが公式に用意しているフックと関数だけで実現します。

コピペ可能なコードが表示されたコードエディタのフラットデザインイラスト

Cocoonを例に説明しますが、コード自体はCocoon固有の機能を使っていないので、他のテーマの子テーマでもそのまま使えます。

完成すると、次の画像のようにWordPressの管理画面に「最終更新日」が追加されるようになります↓

WordPressの管理画面に最終更新日が入っている画像

完成形のコード

Cocoon子テーマの functions.php が初期状態(他にカスタマイズを入れていない状態)であれば、以下の内容にまるごと置き換えてください。

<?php //子テーマ用関数
if ( !defined( 'ABSPATH' ) ) exit;

//子テーマ用のビジュアルエディタースタイルを適用
add_editor_style();

//以下に子テーマ用の関数を書く

// 投稿一覧に「最終更新日」列を追加
function my_add_modified_column( $columns ) {
    $columns['modified_last'] = '最終更新日';
    return $columns;
}
add_filter( 'manage_edit-post_columns', 'my_add_modified_column' );

// 「最終更新日」列をソート可能にする
function my_sortable_modified_column( $columns ) {
    $columns['modified_last'] = 'modified';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_modified_column' );

// 各行に最終更新日時を表示する
function my_show_modified_column_content( $column_name, $post_id ) {
    if ( 'modified_last' !== $column_name ) {
        return;
    }
    echo esc_html( get_post_modified_time( 'Y年n月j日 H:i', false, $post_id, true ) );
}
add_action( 'manage_posts_custom_column', 'my_show_modified_column_content', 10, 2 );

保存後、管理画面の投稿一覧を開くと「最終更新日」列が追加されています。列の見出しをクリックすれば、最終更新日の順に並び替えることもできます。

すでに functions.php に別のカスタマイズを書いている人は、まるごと置き換えてはいけません。ファイルの末尾に、//以下に子テーマ用の関数を書く より下の部分だけを追記してください。このとき <?php は書かないでください。理由は手順のセクションで説明します。


作業手順

手順1:子テーマが有効になっているか確認する

WordPress管理画面の「外観」→「テーマ」を開いて、Cocoon Childが有効になっていることを確認してください。Cocoon(親テーマ)が有効になっている場合は、先にCocoon Childを有効化します。

Cocoon Childが有効になっている状態のスクリーンショット

子テーマを使う理由は、親テーマのアップデート時にカスタマイズが上書きされるのを防ぐためです。親テーマの functions.php を直接編集すると、Cocoonをアップデートした瞬間に追加したコードが消えます。子テーマ側に書いておけば、親テーマの更新とは独立して変更が残ります。

手順2:functions.php を開く

functions.phpを編集する3つの方法を示すアイコンのフラットデザインイラスト

編集方法は主に3つあります。

1つ目は、WordPress管理画面の「外観」→「テーマファイルエディター」から開く方法です。子テーマが有効になっていれば、右側のファイル一覧に functions.php が表示されます。手軽ですが、コードにミスがあると保存した瞬間に画面が真っ白になる可能性があります(復旧方法は後述します)。

2つ目は、レンタルサーバーのファイルマネージャーを使う方法です。たとえばConoHa WINGなら「ファイルマネージャー」、エックスサーバーなら「ファイル管理」からアクセスできます。ファイルの場所は /wp-content/themes/cocoon-child-master/functions.php です。Cocoon公式サイトから配布されている子テーマをそのまま使っている場合、フォルダ名は cocoon-child-master になります。フォルダ名を変更している場合は、自分の環境に合わせて読み替えてください。

3つ目は、FTPクライアント(FileZillaなど)でサーバーに接続して編集する方法です。ファイルの場所は2つ目と同じです。

どの方法でも構いませんが、編集前に現在の functions.php の内容を手元にコピーしておくことを強く推奨します。メモ帳でもテキストエディタでも何でも構いません。元に戻せる状態にしておくことが大事です。

手順3:現在の内容を確認して、コードを追加する

Cocoon子テーマの functions.php を開くと、初期状態では以下のような内容が入っています。

<?php //子テーマ用関数
if ( !defined( 'ABSPATH' ) ) exit;

//子テーマ用のビジュアルエディタースタイルを適用
add_editor_style();

//以下に子テーマ用の関数を書く

add_editor_style(); はエディター用のスタイルシートを読み込ませるためのWordPress公式関数です。今回の作業とは無関係ですが、消さずにそのまま残してください。

この初期状態の場合は、冒頭の「完成形のコード」でファイルの内容をまるごと置き換えて大丈夫です。

もし、すでに他のカスタマイズコードが入っている場合は、まるごと置き換えてはいけません。既存のコードはそのまま残して、ファイルの末尾に、冒頭の完成形コードの //以下に子テーマ用の関数を書く より下にある部分(3つの関数とそれぞれの add_filter / add_action)だけを追記してください。

このとき、<?php を追記する部分に書かないでください。PHPの開始タグはファイルの先頭に1つあれば十分です。2つ書くと文法エラーになり、画面が真っ白になります。

手順4:保存して確認する

ファイルを保存したら、管理画面の「投稿」→「投稿一覧」を開いてください。テーブルの列に「最終更新日」が追加されていれば成功です。

WordPressの管理画面に最終更新日が入っているスクリーンショット

列の見出し「最終更新日」をクリックすると、更新日時の昇順・降順で並び替えができます。


このコードが何をしているか

3つのパーツが連携して1つの機能を構成することを示すパズルピースのフラットデザインイラスト

処理は3つのパーツに分かれています。順番に説明します。

パーツ1:列の見出しを追加する

function my_add_modified_column( $columns ) {
    $columns['modified_last'] = '最終更新日';
    return $columns;
}
add_filter( 'manage_edit-post_columns', 'my_add_modified_column' );

manage_edit-post_columns は、投稿一覧画面の列構成を変更するためのフィルターフックです。WordPressが投稿一覧の列を組み立てるときに、このフックに登録された関数が呼ばれます。

$columns は列の一覧が入った配列です。ここに 'modified_last' というキーで '最終更新日' を追加して返すことで、一覧テーブルに新しい列見出しが現れます。

キー名の modified_last は自分で決めた識別用の文字列です。WordPress側に modified_last という予約語があるわけではありません。後述するパーツ2・パーツ3でこのキーを参照するので、3箇所で同じ文字列を使うことが大事です。

パーツ2:列をソート可能にする

function my_sortable_modified_column( $columns ) {
    $columns['modified_last'] = 'modified';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_modified_column' );

manage_edit-post_sortable_columns は、投稿一覧でソート(並び替え)可能な列を登録するためのフィルターフックです。

左辺の 'modified_last' はパーツ1で追加した列のキーです。右辺の 'modified' は、WordPressの WP_Query に渡す orderby パラメータの値です。modified を指定すると、投稿の最終更新日時(post_modified カラム)を基準に並び替えが行われます。

modifiedWP_Query が標準で対応している orderby の値なので、並び替え用のクエリを自分で書く必要はありません。WordPressが内部で適切なSQLを組み立ててくれます。

このパーツがなくても列自体は表示されますが、見出しをクリックしたときの並び替えができません。更新日を表示する目的を考えると、ソートできないと不便なので入れています。

パーツ3:各行に日時を表示する

function my_show_modified_column_content( $column_name, $post_id ) {
    if ( 'modified_last' !== $column_name ) {
        return;
    }
    echo esc_html( get_post_modified_time( 'Y年n月j日 H:i', false, $post_id, true ) );
}
add_action( 'manage_posts_custom_column', 'my_show_modified_column_content', 10, 2 );

manage_posts_custom_column は、投稿一覧の各行でカスタム列の中身を出力するためのアクションフックです。一覧に表示されるすべての投稿に対して、行ごとに呼ばれます。

第1引数の $column_name には、今どの列を描画しているかのキーが渡されます。自分が追加した modified_last 以外の列のときは何もせず return しています。これがないと、他の列にまで日付が出力されてしまいます。

get_post_modified_time() はWordPress公式の関数で、指定した投稿の最終更新日時を返します。引数の意味は以下のとおりです。

引数の位置今回の値意味
第1引数'Y年n月j日 H:i'日付の表示フォーマット。PHPの日付書式文字列を使います
第2引数falseGMTではなくサイトのタイムゾーン設定を使う
第3引数$post_id対象の投稿ID
第4引数truedate_i18n() を通して翻訳対応の形式で返す

第4引数について補足します。今回のフォーマット 'Y年n月j日 H:i' は数字と固定文字だけで構成されているので、一般的な日本語環境では true でも false でも表示結果は変わりません。ただし、フォーマットを 'F j, Y' のような英語の月名を含む形式に変更した場合、true にしておくと翻訳処理が効いて日本語の月名で表示されます。将来フォーマットを変える可能性を考えて true にしています。

esc_html() で囲んでいるのは、出力をエスケープしてXSS(クロスサイトスクリプティング)を防ぐためです。今回は日付しか出力しないので実害が出る場面は考えにくいですが、管理画面であっても出力をエスケープするのはWordPress開発の基本的な作法です。


関数名の my_ について

コード内の関数名には my_ というプレフィックス(接頭辞)を付けています。

function my_add_modified_column( $columns ) {

WordPressでは、テーマやプラグインがそれぞれ独自の関数を定義します。もし別のプラグインが同じ add_modified_column という名前の関数を定義していた場合、PHPは「同名の関数が2つある」としてエラーを出し、サイトが動かなくなります。

my_ のようなプレフィックスを付けておくと、名前が衝突する確率を大幅に下げられます。これはWordPress公式のコーディング規約でも推奨されている作法です。

my_ の部分は自由に変えて構いません。サイト名の略称(例: abc_add_modified_column)などでもOKです。大事なのは、add_filter / add_action で指定する関数名と、function で定義する関数名が一致していることです。


固定ページにも表示したい場合

ここまでのコードは「投稿」一覧だけに効きます。WordPressでは投稿と固定ページで使うフックが分かれているためです。

固定ページの一覧にも同じように最終更新日を表示したい場合は、以下のコードを使ってください。投稿と固定ページの両方に対応しています。

<?php //子テーマ用関数
if ( !defined( 'ABSPATH' ) ) exit;

//子テーマ用のビジュアルエディタースタイルを適用
add_editor_style();

//以下に子テーマ用の関数を書く

// 投稿・固定ページ一覧に「最終更新日」列を追加
function my_add_modified_column( $columns ) {
    $columns['modified_last'] = '最終更新日';
    return $columns;
}
add_filter( 'manage_edit-post_columns', 'my_add_modified_column' );
add_filter( 'manage_pages_columns', 'my_add_modified_column' );

// 「最終更新日」列をソート可能にする
function my_sortable_modified_column( $columns ) {
    $columns['modified_last'] = 'modified';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_modified_column' );
add_filter( 'manage_edit-page_sortable_columns', 'my_sortable_modified_column' );

// 各行に最終更新日時を表示する
function my_show_modified_column_content( $column_name, $post_id ) {
    if ( 'modified_last' !== $column_name ) {
        return;
    }
    echo esc_html( get_post_modified_time( 'Y年n月j日 H:i', false, $post_id, true ) );
}
add_action( 'manage_posts_custom_column', 'my_show_modified_column_content', 10, 2 );
add_action( 'manage_pages_custom_column', 'my_show_modified_column_content', 10, 2 );

投稿だけ対応の版と比べて、増えたのは3行です。

  • add_filter( 'manage_pages_columns', ... ) で固定ページ一覧にも列見出しを追加
  • add_filter( 'manage_edit-page_sortable_columns', ... ) で固定ページ一覧でもソートを有効化
  • add_action( 'manage_pages_custom_column', ... ) で固定ページ一覧の各行にも日時を出力

投稿用のフックが manage_posts_custom_column なのに対し、固定ページ用は manage_pages_custom_column です。固定ページは階層構造を持つ投稿タイプ(親ページ・子ページの関係が作れる)なので、WordPress内部ではフックが分かれています。


カスタム投稿タイプにも表示したい場合

Cocoonの標準機能だけを使っている場合はあまり関係ありませんが、プラグインや自前のコードでカスタム投稿タイプを登録している場合の補足です。

カスタム投稿タイプの一覧に列を追加するには、投稿タイプのスラッグに応じたフックを使います。たとえばスラッグが book なら以下のようになります。

add_filter( 'manage_edit-book_columns', 'my_add_modified_column' );
add_filter( 'manage_edit-book_sortable_columns', 'my_sortable_modified_column' );
add_action( 'manage_book_posts_custom_column', 'my_show_modified_column_content', 10, 2 );

関数の中身は同じものを使い回せます。フック名だけが変わる形です。

3つのフックの命名規則をまとめると以下のようになります。

用途フック名の形式book の場合
列の追加manage_edit-{slug}_columnsmanage_edit-book_columns
ソートの有効化manage_edit-{slug}_sortable_columnsmanage_edit-book_sortable_columns
各行の値を出力manage_{slug}_posts_custom_columnmanage_book_posts_custom_column

列の追加とソートの有効化は manage_edit-{slug}_... という形式ですが、各行の値を出力するフックだけは manage_{slug}_posts_custom_column と形式が異なります。WordPressのフック命名には歴史的な経緯による揺れがあるので、規則から類推せず、上の表を参照するほうが確実です。


日付の表示フォーマットを変えたい場合

コード内の 'Y年n月j日 H:i' を変更すれば、表示される日付の形式を変えられます。PHPの日付書式文字列をそのまま使えます。

いくつか例を挙げます。

フォーマット文字列表示例
'Y年n月j日 H:i'2026年3月22日 14:30
'Y/m/d H:i'2026/03/22 14:30
'Y-m-d'2026-03-22
'n月j日'3月22日
'Y/m/d G:i:s'2026/03/22 14:30:05

n は先頭ゼロなしの月(3月なら 3)、m は先頭ゼロありの月(3月なら 03)です。H は24時間表記で先頭ゼロあり、G は24時間表記で先頭ゼロなしです。

管理画面で使う分には、秒まで出す必要はないと思います。私は 'Y年n月j日 H:i' を使っていますが、一覧のカラム幅が気になるなら 'Y/m/d' のように短くするのも手です。


画面が真っ白になったときの復旧方法

画面が真っ白になった状態から正常に復旧するプロセスを示すフラットデザインイラスト

functions.php の編集でコードに文法エラーがあると、サイト全体(管理画面を含む)が真っ白になって何も操作できなくなることがあります。焦る場面ですが、復旧は難しくありません。

復旧手段1:レンタルサーバーのファイルマネージャーを使う

レンタルサーバーの管理パネルからファイルマネージャーを開きます。WordPressの管理画面が使えなくても、サーバーの管理パネルは別のシステムなので問題なくアクセスできます。

/wp-content/themes/cocoon-child-master/functions.php を開いて、追加したコードを削除するか、手順2で控えておいた元の内容に戻してください。保存すれば、サイトは元に戻ります。

復旧手段2:FTPクライアントを使う

FileZillaなどのFTPクライアントでサーバーに接続し、同じファイルを編集します。手順はファイルマネージャーの場合と同じです。

復旧手段3:エラーの内容を確認したい場合

真っ白な画面のままでは原因がわからないので、エラーの中身を確認したいことがあります。その場合は、WordPressのルートディレクトリにある wp-config.php を開いて、以下の行を探します。

define( 'WP_DEBUG', false );

エラーの確認方法は2つあります。

1つ目は、画面にエラーを直接表示する方法です。

define( 'WP_DEBUG', true );

上のように変更すると、画面にエラーメッセージが表示されるので、どの行に問題があるか特定できます。ただし、この状態ではサイトの訪問者にもエラー情報が見えてしまいます。原因を特定したらすぐに false に戻してください。

2つ目は、画面には表示せずログファイルに記録する方法です。本番サイトで訪問者にエラーを見せたくない場合は、こちらのほうが安全です。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

この設定にすると、エラーは画面に表示されず、代わりに /wp-content/debug.log というファイルに記録されます。ファイルマネージャーやFTPで debug.log を開けば、エラーの内容を確認できます。

どちらの方法でも、原因の特定と修正が終わったら WP_DEBUGfalse に戻してください。デバッグモードを有効にしたまま運用すると、パフォーマンスへの影響やセキュリティ上の懸念があります。

いずれの復旧手段でも、事前にバックアップ(元の内容のコピー)を取っていれば、貼り直すだけで元通りになります。だからこそ、手順2で「編集前の内容を手元にコピーしておく」ことが大事です。


よくあるミスと対処法

<?php を2回書いてしまった

最も多いミスです。完成形のコードをコピーして functions.php の末尾に追記するとき、コードの先頭にある <?php まで一緒に貼り付けてしまうと、PHPの開始タグが2つになり、文法エラーで画面が真っ白になります。

追記する場合は、//以下に子テーマ用の関数を書く より下の部分だけを貼り付けてください。<?php の行は不要です。

既存のカスタマイズを消してしまった

完成形コードでまるごと置き換えたとき、もともと入っていた別のカスタマイズまで消えてしまうケースです。たとえばGoogle Analyticsのトラッキングコードを functions.php に書いていた場合、置き換えるとそれも消えます。

対処法は、編集前に控えておいた元の内容から、必要な部分を改めて追記し直すことです。これも「編集前にコピーしておく」ことで防げます。

列は出たが日付が空欄になっている

コード自体にエラーはないが日付が表示されないケースです。原因として考えられるのは、パーツ3の $column_name の比較先とパーツ1のキー名が一致していない場合です。コードの一部だけを書き換えたときに、キー名が modified_lastmodified-last のように微妙に違っていると、条件分岐で return されてしまい何も出力されません。3箇所のキー名が完全に一致しているか確認してください。

固定ページの一覧に列が出ない

これはミスではありません。投稿用コードは投稿一覧にしか効かない仕様です。固定ページにも表示したい場合は、この記事の「固定ページにも表示したい場合」のコードを使ってください。


この方法のメリットとデメリット

メリットは、プラグインを追加せずに管理画面の視認性を改善できることです。最終更新日が一覧に並んでいると、「最近触っていない記事」と「つい最近更新した記事」がひと目で区別できます。ソートもできるので、リライト対象の洗い出しにも使えます。

デメリットは、functions.php を直接編集する必要があることです。テーマファイルエディターから編集する場合、コードミスで管理画面ごとアクセスできなくなるリスクがあります。この記事で復旧方法を書いたのはそのためです。

同じことを実現するプラグインも存在しますが、この程度の処理であれば10数行のコードで済みます。プラグインを1つ増やすことによる管理コストや更新対応を考えると、コードで対応するほうが合理的だと私は考えています。


まとめ

最終更新日の管理が完了したことを示すカレンダーとチェックリストのフラットデザインイラスト

Cocoon子テーマの functions.php に3つの関数を追加するだけで、投稿一覧に最終更新日を表示できます。WordPressが公式に用意しているフック(manage_edit-post_columnsmanage_edit-post_sortable_columnsmanage_posts_custom_column)と関数(get_post_modified_time())だけを使っているので、特殊なことはしていません。

固定ページにも表示したければフックを3行足すだけ、日付の形式を変えたければフォーマット文字列を1箇所変えるだけです。

編集前のバックアップさえ忘れなければ、仮にミスをしても元に戻せます。地味な改善ですが、記事数が増えてきた段階で入れておくと管理がだいぶ楽になります。

参考までに。それでは!

コメント