管理画面、投稿一覧の既存のカラムに表示項目を追加
WordPress 、管理画面の投稿一覧ページにおいてカラムを追加して新たに表示する項目を増やすことは以前にやってます。投稿にアップしてる画像のサムネイルを表示させたり、カスタムフィールドのカラムをつくったりと。
今回はちょっと必要があって更新日を表示させたいと思ったのですが、それだけのためにカラムを一つ増やしてというのもなんだか。すぐできることなので、とりあえずやってみると、無駄に広いカラムの幅をとってしまったりと、どうにもよろしくないのです。
もともと投稿日のカラムが存在していて、表示されているのがそれだけなので、そのカラムに一緒に表示できればスマートなんですけどね。
これ!できないわけはないだろう、と思いつつネットで探してみても見つけられなかった。検索のしかたがへたくそなんだろな~?めんどうだな~、と思いつつ、自分でプログラムの中を探したほうがはやいかな?と。
フィルターフック "post_date_column_time"
投稿一覧にカラムを追加するフィルターフックは、 “manage_posts_columns”。たぶん、このフックがあるファイルになにかあるのではないかしら?とはだれしも思いつくこと。この “manage_posts_columns”フックのあるファイルは、wp-admin/includes/class-wp-posts-list-table.phpとのこと。さっそく始めから見ていくと1,128行目あたり、function column_date()でこのフィルターフックを見つけました。
<?php
if ( 'excerpt' === $mode ) {
/**
* Filters the published time of the post.
*
* If `$mode` equals 'excerpt', the published time and date are both displayed.
* If `$mode` equals 'list' (default), the publish date is displayed, with the
* time and date together available as an abbreviation definition.
*
* @since 2.5.1
*
* @param string $t_time The published time.
* @param WP_Post $post Post object.
* @param string $column_name The column name.
* @param string $mode The list display mode ('excerpt' or 'list').
*/
echo apply_filters( 'post_date_column_time', $t_time, $post, 'date', $mode );
} else {
/** This filter is documented in wp-admin/includes/class-wp-posts-list-table.php */
echo '<span title="' . $t_time . '">' . apply_filters( 'post_date_column_time', $h_time, $post, 'date', $mode ) . '</span>';
}
?>
パラメータで、$post を渡してくれるので、post_type を判断して処理させることができるし(というか、ここでのフックの情報としては必須だと思われますけれど)、更新日も$post->post_modified で楽ちんに取得することができます。で、$h_time に更新日を付加して戻してやれば良いということになります。
そしてパラメータ$mode ですが、説明書きがありますね。"excerpt"は"抜粋"とか"引用句"とかという意味なんですが、「公開時間と日付、両方を表示する」となってます。で、これはいかなる時かということになるのですが、予約投稿した場合なんぞに、公開済みの投稿とは違い日付と時間が両方表示されています。ということで、予約投稿の場合もこの"excerpt mode" になっていると推測できます。この場合は、更新日のデータはまだ存在していない可能性がありますね。が、実際に試してみるとその場合でもちゃんとpost_modified のデータは設定されていました。まぁでも、その場合は更新日は必要ないので、$mode === 'list'の場合だけ、ということにしました。
と、いうことで次のごとく。
<?php
function add_modified_date_column( $h_time, $post, $column_name, $mode ) {
if ( 'diys' === $post->post_type ) {
if ( 'list' === $mode ) {
$modified = date( 'Y/m/d', strtotime( $post->post_modified ) );
$h_time .= '<br>更新日:' . $modified;
}
}
return $h_time;
}
add_filter('post_date_column_time','add_modified_date_column', 10, 4 );
?>
使うパラメータは3つですが、結局、並びがあって4つを受け取りますので、最後の行のadd_filter の4つ目の引数として4を指定することを忘れるべからず。
で、こんな感じになります。
Post : 2020/05/24 11:44
Comments feed
Trackback URL : https://strix.main.jp/wp-trackback.php?p=158437