【WordPress】管理画面の投稿一覧に最終更新日を表示しソート可能にする方法|orderby=modifiedで正しく実装

WordPressの管理画面で投稿一覧を効率的に管理するために、「最終更新日」を表示し、そのカラムでソートできるようにする方法を紹介します。このカスタマイズにより、コンテンツの更新履歴を簡単に追跡し、管理がしやすくなります。

この記事でわかること

  • 投稿一覧に「最終更新日」カラムを追加する方法
  • 正しいキー・orderby指定でソート可能にする方法
スポンサーリンク

最終更新日カラムを投稿一覧に追加する

まず、最終更新日を表示するために、投稿一覧に「最終更新日」というカラムを追加します。以下のコードをテーマの functions.php ファイルに追加してください。

functions.php:最終更新日カラムを追加して表示
function add_last_updated_column( $columns ) {
    $columns['last_updated'] = __( '最終更新日' );
    return $columns;
}
add_filter( 'manage_posts_columns', 'add_last_updated_column' );

function show_last_updated_column_content( $column, $post_id ) {
    if ( 'last_updated' === $column ) {
        echo esc_html( get_the_modified_date( '', $post_id ) );
    }
}
add_action( 'manage_posts_custom_column', 'show_last_updated_column_content', 10, 2 );

このコードは、投稿一覧に「最終更新日」カラムを追加し、各投稿の最終更新日を表示します。

最終更新日カラムでソート可能にする

次に、最終更新日でソートできるようにするために、追加のカスタマイズを行います。

functions.php:正しいorderbyでソートを実装
function sortable_last_updated_column( $columns ) {
    $columns['last_updated'] = 'last_updated';
    return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'sortable_last_updated_column' );

function sort_by_last_updated_column( $query ) {
    if ( ! is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( 'last_updated' === $query->get( 'orderby' ) ) {
        $query->set( 'orderby', 'modified' ); // post_modified列で直接ソート(meta_keyは不要)
    }
}
add_action( 'pre_get_posts', 'sort_by_last_updated_column' );
_edit_lastメタキーを使ってはいけない
この実装で meta_key => '_edit_last'orderby => 'meta_value_num' を使う例をよく見かけますが、これは誤りです。本番WPコア(wp-admin/includes/post.php)を確認したところ、_edit_lastupdate_post_meta($post_id, '_edit_last', get_current_user_id()) という形で保存される、「投稿を最後に編集したユーザーのID」を格納するメタキーであり、更新日時とは一切関係ありません。このメタキーで数値順にソートすると、実際には「誰が最後に編集したか」のユーザーID順に並んでしまい、表示されている更新日時とはまったく異なる並び順になります。post_modifiedpost_modified_gmtwp_postsテーブルのネイティブなカラム(カスタムフィールドではない)のため、meta_keyを指定する必要は無く、orderby => 'modified' を指定するだけで正しくソートできます。

管理画面で確認する

コードを追加した後、WordPressの管理画面の「投稿」セクションに移動し、「最終更新日」カラムが追加されていることを確認します。カラムのヘッダーをクリックすることで、実際の更新日時の新しい順・古い順でソートされることを確認してください。

よくある質問(FAQ)

Q管理画面の投稿一覧に最終更新日カラムを追加するには?
Amanage_posts_columnsフィルターでカラムを追加し、manage_posts_custom_columnアクションで内容を出力します。get_the_modified_date()で更新日時を表示します。
Q追加したカスタムカラムでソートできるようにするには?
Amanage_edit-post_sortable_columnsフィルターでソート可能カラムとして登録し、pre_get_postsで対象カラムが選択された場合にorderby=>’modified’を設定します。post_modifiedはwp_postsのネイティブカラムのため、meta_key/meta_value_numは使いません。
Q管理画面でのみカラムを追加する際の注意点は?
Ais_admin()チェックを入れてフロントエンドへの影響を防ぎます。管理画面のスクリプト・スタイル追加はadmin_enqueue_scriptsフックを使い、wp_enqueue_scriptsとは別に管理します。

まとめ

  • カラム表示:manage_posts_columns + manage_posts_custom_column
  • ソート:manage_edit-post_sortable_columns + pre_get_postsでorderby=>'modified'
  • 注意_edit_lastは編集者のユーザーIDでありソートに使ってはいけない

このカスタマイズにより、投稿の更新履歴を正しく追跡でき、管理の効率が向上します。