みなさん、WordPress楽しんでますか?(笑)
カスタマイズがいろいろと出来る分、悩むことも多いですよね。
今回は、WordPressの管理画面の投稿一覧についてのノウハウです。
まずは、準備として、カラムを追加する方法から説明しますね。
カラムを追加したい!
add_filter('manage_posts_columns', 'manage_posts_columns_title');
function manage_posts_columns_title( $columns ) {
if ( get_post_type($post) == 'post' ) {
$columns = array(
'cb' => '',
'thumbnail' => '',
'title' => __('Title'),
'event_datetime' => 'イベント日時',
'categories' => __('Category'),
'tags' => __('Tags'),
);
}
return $columns;
}
これについては説明はいらないと思います。
多分、みなさんここまでは問題なく出来ている。問題はこの次です!
カラムを並び替えたい!
WordPressの管理画面の投稿一覧で、カスタムフィールドのカラムを追加した後に、やりたいことといえば並べ替え。
これが一つだけであれば、下記のような感じで作れるのですが、複数のmeta_keyで並び替える方法となると、良い解決策を見つけることができませんでした。
一つのmeta_key
$query->set( 'meta_key','custom_field_name' );
$query->set( 'orderby','meta_value_num' );
$query->set( 'order','ASC' );
こういうやつですね。
この方法は、いろんなサイトでわかりやすく紹介されていますし、内容がシンプルなので問題ないと思います。
<参考サイト>
https://www.akecre.com/wordpress/pregetposts_cf_date/
複数のmeta_keyでカラムを並び替えたい!
お待たせしました。ここからが僕がやりたかったことです。
どこを探しても僕がやりたいことがバシッ!と描いてない。
仕方なく英語のサイトを漁っていたら発見することができました!
それを参考にしたのが下記のやつです。
add_filter( 'manage_edit-post_sortable_columns', 'add_sort_event_datetime');
function add_sort_event_datetime($columns){
$columns['event_datetime'] = 'event_datetime';
return $columns;
}
add_action( 'pre_get_posts', 'add_sort_event_datetime_orderby', 1 );
function add_sort_event_datetime_orderby( $query ) {
if ( is_admin() && $query->is_main_query() && ( $orderby = $query->get('orderby') ) ) {
switch( $orderby ) {
case 'event_datetime':
$meta_query = array(
array(
'event_date_clause' => array(
'key' => 'event_date',
'compare' => 'EXISTS'
)
),
array(
'event_time_clause' => array(
'key' => 'event_start',
'compare' => 'EXISTS'
)
)
);
$query->set('meta_query', $meta_query);
$order = $query->get('order');
$query->set('orderby', array('event_date_clause' => $order, 'event_time_clause' => $order));
break;
}
}
}
これで、昇順・降順も▲▼できちんとできます。
最初のセクションで、「イベント日時」のカラムを追加しましたが、一覧のデータはカスタムフィールドの「イベント日付」+「イベント開始時間」を合わせて「m/d H:i」の形式で表示しています。
イベント日付だけでなく、イベント開始時間だけでもない。両方一緒に並び替える方法。
これを見つけるのが本当に大変だった。
あと一歩手が届きそうなサイトは見つかったんですけどね。
まあ、何はともあれ、無事カラムの追加と並び替えの機能を実装することができました。
めでたしめでたし。