投稿記事にカスタムフィールドを設定しているとき、一覧表示の時にもその値を表示したいと思う時ありますよね。また、その値でソートできればとても便利かなと思います。
そこでソートできるカラムを追加したいと思います。
カラムを追加
以下の例は’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']); //タグ
