Wonderful! WordPress

管理画面、投稿一覧の既存のカラムに表示項目を追加

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を指定することを忘れるべからず。
で、こんな感じになります。
wordpress adminscreen post-list

Leave a Reply!

JavaScript is necessary to send a comment.
You can edit and delete your comment if you input a edit key.
Edit key is necessary for attesting you when you edit and delete it.
The tag of HTML cannot be used in comment.
When you comment for the first time, it is displayed after the approval of the administrator.
Because I cannot speak English so much, it takes time to answer.
Required fields are marked *.

※Please enter more than 5 characters only alphabets.
※Edit or delete are possible for 2000 days after approval.

*

♠Simplistic Comment User Editable v4.0

♠When visitors leave comments on the site this site collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.
♠This site does not use cookie when visitors leave comments and commenter edit comment.
♠This site uses Akismet to reduce spam. Learn how your comment data is processed.

Comments feed

Trackback URL : https://strix.main.jp/wp-trackback.php?p=158437

Sanbanse Funabashi
2010.10.24 sunrise

Top

スクロールさせるか画像をクリックすると元に戻ります。