WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです

【WordPress】管理画面の投稿一覧へ並び替え可能な「最終更新日」列を追加する方法

公開日:2019(令和元)年8月13日/最終更新日:

Knowledge Base Wordpress ha-Basic テーマ



長くWordPressサイトを運営していると標準で管理画面の投稿一覧、固定ページ一覧へ表示される「公開日」よりも、公開後に修正した日付である「最終更新日」が気になりませんか??

この「最終更新日」はきちんとhtml上に出力されているとGoogleなどの検索エンジンが参照し、検索結果に日付として表示されるようになっています。

そうすると、検索結果に日付が表示される=検索結果を見た人が記事の鮮度を知るということになり、2つの似た記事があったらやっぱり鮮度の高い方を見たくなりますよね??本当にその当時のことが書かれている記事で今にそぐわないものなら仕方ないことですけど、そうでない普遍的な記事なのにそう判断されたら・・・もったいないことになるかも知れません。

でもWordPressの標準機能では前述した通り、投稿一覧や固定ページ一覧には「公開日」しか表示されず、最終更新日は各記事の編集画面でないと確認できないですから、確認するのも面倒。

そこで今回は「最終更新日」を一覧へ表示させる簡単な方法、しかも「最終更新日」の日付で降順・昇順にソートできるようにする方法を紹介します。

管理画面の投稿一覧へ並び替え可能な「最終更新日」列を追加する方法

テーマの「functions.php」へ以下のコードをそのままコピペして保存します。

/******************** 投稿一覧へ最終更新日を表示 ******************/
function modified_column_register( $columns ) {
$columns['Modified'] ='最終更新日';
return $columns;
}
add_filter( 'manage_posts_columns', 'modified_column_register' );
add_filter( 'manage_pages_columns', 'modified_column_register' );

function modified_column_display( $column_name, $post_id ) {
switch ( $column_name ) {
case 'Modified':
global $post;
echo '<p class="mod-date">';
echo '<em>'.get_the_modified_date().'</em><br />';
break; // end all case breaks
}
}
add_action( 'manage_posts_custom_column', 'modified_column_display', 10, 2 );
add_action( 'manage_pages_custom_column', 'modified_column_display', 10, 2 );

function modified_column_register_sortable( $columns ) {
$columns['Modified'] = 'modified';
return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'modified_column_register_sortable' );
add_filter( 'manage_edit-page_sortable_columns', 'modified_column_register_sortable' );

これだけで、投稿一覧と固定ページの一覧へ並び替え可能な「最終更新日」の一覧が表示されるようになります。

コードの解説

いくつかの似たようなコードの塊で構成されていますので、それぞれがどんな役割になっているのかをコード順に説明します。

①投稿一覧・固定ページ一覧に「最終更新日」という列を追加する

まず第一段階として投稿一覧と固定ページ一覧へ「最終更新日」という名前の列を追加するように指示しています。

function modified_column_register( $columns ) {
$columns['Modified'] ='最終更新日';
return $columns;
}
add_filter( 'manage_posts_columns', 'modified_column_register' );
add_filter( 'manage_pages_columns', 'modified_column_register' );

②投稿一覧・固定ページ一覧に「最終更新日」のデータを表示する

ここで各投稿・固定ページデータに保存されている「最終更新日」のデータを①の列へ表示するという指示をしています。

function modified_column_display( $column_name, $post_id ) {
switch ( $column_name ) {
case 'Modified':
global $post;
echo '<p class="mod-date">';
echo '<em>'.get_the_modified_date().'</em><br />';
break; // end all case breaks
}
}
add_action( 'manage_posts_custom_column', 'modified_column_display', 10, 2 );
add_action( 'manage_pages_custom_column', 'modified_column_display', 10, 2 );

③「最終更新日」列の並び替えをする

最後に②で表示されたデータを降順・昇順で並び替えられるようにしています。

function modified_column_register_sortable( $columns ) {
$columns['Modified'] = 'modified';
return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'modified_column_register_sortable' );
add_filter( 'manage_edit-page_sortable_columns', 'modified_column_register_sortable' );

おまけ カスタム投稿タイプがあるときは

上で3つのコードブロックについて説明させていただきましたが、どのブロックも末尾にadd_filter(…という2行があるのに気づきますよね?この記述によってどの投稿タイプに対してこの処理を行うのかというのが指定されているのです。

例えば③で

add_filter( 'manage_edit-post_sortable_columns', 'modified_column_register_sortable' );

と書かれている中の「manage_edit-post_sortable_columns」というのは「manage_edit-投稿タイプ_sortable_columns」という意味で、この場合は「post」=「投稿」に対して適用してくださいねという意味なのです。

従って独自のカスタム投稿タイプにも適用したい場合には

add_filter( 'manage_edit-post_sortable_columns', 'modified_column_register_sortable' );

をすぐ下にコピーして

add_filter( 'manage_edit-独自のカスタム投稿スラグ_sortable_columns', 'modified_column_register_sortable' );

とすればそのカスタム投稿タイプにも機能が加わることになります。

例えばこのサイトのWordPressプラグイン紹介記事は「wppi」というカスタム投稿タイプにまとめて管理しているので

add_filter( 'manage_edit-wppi_sortable_columns', 'modified_column_register_sortable' );

とすればWordPressプラグイン紹介記事の一覧でもこの機能が有効になるということです。

ちなみに環境によって、これを追加しないと動作しない場合と、追加しなくても動作する場合がありますので、一旦コードを追加してみて機能しないようであれば投稿タイプを指定する行を追加するという方法で実装すればいいと思います。

公開日の横に表示させたいときは

環境によっては「あれ?公開日と離れた場所に最終更新日が表示された。これでは見にくいなぁ・・」という方もいると思います。その理由と対処方法をちょっと説明しておきますね。

投稿一覧に何かの列を表示する仕組みと列の並びは

  1. WordPress標準の一覧画面用列を表示する
  2. プラグインで追加された一覧画面用の列を表示する
  3. テーマで追加された一覧画面用の列を表示する

という順になっています。これはプログラムが読み込まれていく順番なので仕方がありません。公開日と最終更新日が離れてしまうのは途中にプラグインやテーマ独自の列が追加されているからです。

「更新日」列を「公開日」列のできるだけ近くに表示する方法は3つあります。

1つはfunctions.phpのできるだけ前の方に記述すること。こうすることでプラグインによる列の追加がなければテーマ独自の列が表示される前(つまりは左側)に表示されるようになります。

もう1つはプラグインを使うこと。前述したようにテーマよりもプラグインが先に読み込まれますので、プラグインで機能を追加することで解消できる場合があります。同じ機能を持つプラグインについては後述します。

最後に並び順を強制的に指定する方法です。

テーマのfunctions.phpへ追記して並び順を指定する方法は「投稿一覧 列 並び替え」などのキーワードでググると出てきますのでそれらを参考にしてください。

ただ、functions.phpへ追記する方法だと、後から追加した列などが出てくるたび、投稿一覧に何かの列を追加するプラグインを追加するたびに調整が必要なので多分面倒でしょう・・・。

そんなときは

というプラグインを使うと簡単に列の場所を編集することができますので、そちらを使った方が無難かもしれません。

【ha-Basic】テーマへ適用するときは

2019年8月13日以降に【ha-Basic】テーマをダウンロードいただいた方は標準で機能が備わっていますのでこの機能について追加作業は必要ありません。もしも表示されていない場合には投稿一覧で画面右上にある「表示オプション」をクリックし、「最終更新日」項目にチェックが入っているかを確認ください。

それ以前にテーマをダウンロードいただいた方は以下の作業を行えば機能を使うことができます。

「外観」→「テーマエディタ」を開き、右側の一覧から「functions.php」を開いてください

360行目付近にある

/******************** アイキャッチ画像、ビュー数、メタ情報を管理画面の一覧へ表示 ***********************/
/***** 投稿 *****/
function manage_posts_columns($columns) {
・・・以下コード続く・・・

の前に以下を追加します

/******************** 投稿一覧へ最終更新日を表示 ******************/
function modified_column_register( $columns ) {
$columns['Modified'] ='最終更新日';
return $columns;
}
add_filter( 'manage_posts_columns', 'modified_column_register' );
add_filter( 'manage_pages_columns', 'modified_column_register' );

function modified_column_display( $column_name, $post_id ) {
switch ( $column_name ) {
case 'Modified':
global $post;
echo '<p class="mod-date">';
echo '<em>'.get_the_modified_date().'</em><br />';
break; // end all case breaks
}
}
add_action( 'manage_posts_custom_column', 'modified_column_display', 10, 2 );
add_action( 'manage_pages_custom_column', 'modified_column_display', 10, 2 );

function modified_column_register_sortable( $columns ) {
$columns['Modified'] = 'modified';
return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'modified_column_register_sortable' );
add_filter( 'manage_edit-page_sortable_columns', 'modified_column_register_sortable' );

この場所へ挿入するのは、【ha-Basic】で表示することにしている累計閲覧数列の手前(左)に表示させたいからです。

ちなみに「functions.php」の末尾や、「a-insert-functions.php」へ追加すると、投稿一覧画面の一番右へ「最終更新日」列が表示されるようになります。理由は上の「公開日の横に表示させたいときは」によるものです。

この機能をプラグインで済ませたいときは

実はこのコード、公式サイトで公開されているプラグインのソースをそのまま流用しただけなんです(汗)。簡単なコードのみの構成で、特に設定を割り込ませる必要もないのでわざわざプラグインを1つ足す必要がないと思い、コードのみを使いました。逆にテーマのコードを編集するのはちょっと怖い・・・という方は

を使えば同じ動作をさせることができます。

関数名が競合しないよう、上の紹介のようにテーマを編集するかプラグインを使うかを決め、テーマへ追加したコードを削除した後にプラグインを有効化するようにしてください

著:清水 由規, 著:清水 久美子, 著:鈴木 力哉, 著:西岡 由美, 読み手:星野 邦敏, 読み手:吉田 裕介
¥2,889 (2024/02/08 17:07時点 | Amazon調べ)