投稿記事にカスタムフィールドを設定しているとき、一覧表示の時にもその値を表示したいと思う時ありますよね。また、その値でソートできればとても便利かなと思います。
そこでソートできるカラムを追加したいと思います。
カラムを追加
以下の例は’plan’と’venue’というカスタムフィールドのカラムを追加します。
function add_posts_columns_name($columns) { $columns[‘plan'] = '予定日'; $columns[‘venue'] = '会場'; return $columns; } add_filter( 'manage_posts_columns', 'add_posts_columns_name' );
function add_column($column_name, $post_id) { if ($column_name == 'plan') { $plan = get_post_meta($post_id, 'plan', true); //dateカスタムフィールドから値を取得 } if ($column_name == 'venue') { $venue = get_post_meta($post_id, 'venue', true); //venueカスタムフィールドから値を取得 } if (isset($plan) && $plan) { echo attribute_escape($plan); //予定日を表示 } elseif (isset($venue) && $venue) { echo attribute_escape($venue); //会場を表示 } else { echo ‘なし'; //フィールドに値がなければ’なし'を表示 } } add_action( 'manage_posts_custom_column', 'add_column', 10, 2 );
そのカラムにソート機能を入れたい場合
function custom_sortable_columns($sortable_column) { $sortable_column['plan'] = 'plan'; $sortable_column['venue'] = 'venue'; return $sortable_column; } function custom_orderby_columns( $vars ) { if (isset($vars['orderby']) && 'plan' == $vars['orderby']) { //予定日をソートできるようにする $vars = array_merge($vars, array( 'meta_key' => 'plan', 'orderby' => 'meta_value', ‘meta_type’ => ‘date’, //値が日付なのでdate型でキャスト )); } if (isset($vars['orderby']) && 'venue' == $vars['orderby']) { //会場をソートできるようにする $vars = array_merge($vars, array( 'meta_key' => 'venue', 'orderby' => 'meta_value', ‘meta_type’ => ‘char’, //値が文字列なのでchar型でキャスト )); } return $vars; } add_filter( 'manage_edit-post_sortable_columns', ‘custom_sortable_columns’ ); add_filter( 'request', 'custom_orderby_columns' );
これで管理画面の投稿一覧に表示されソートもできるようになります。 デフォルトだとカスタムフィールドの値のソートが値によっては正しくソートされないので、値に応じて特定の型にキャストします。
ちなみに、固定ページの一覧に同じことをしたければ、
add_filter( 'manage_pages_columns', 'add_posts_columns_name' ); add_action( 'manage_pages_custom_column', 'add_column', 10, 2 ); add_filter( ‘manage_edit-page_sortable_columns', 'custom_sortable_columns');
でフィルターすれば実装できます。
また、表示したくないカラムを非表示にすることもできます。
以下の例は作成者のカラムを非表示にしています。
function custom_columns($columns) { unset($columns['author']); return $columns; } add_filter( 'manage_posts_columns', 'custom_columns' );
作成者以外のカラムでは例えば以下のようなのもあります。
unset($columns['title']); //タイトル unset($columns['categories']); //カテゴリー unset($columns['tags']); //タグ