WordPressの管理画面の投稿一覧をカスタムフィールドの値でソートする
- 2019.11.13
- Wordpress

WordPressの管理画面で投稿一覧を表示するときにタイトルや日付でソートすることができます。
しかし、自分自身で追加したカスタムフィールドの値などではソートをすることができません。
そこで今回はカスタムフィールドの値でソートをする方法を書きました。
コード
/**
* オリジナルのカラムを登録する
*/
function my_add_columns($columns) {
$ordered_columns = [];
foreach($columns as $key => $value) {
if ($value === '日付') { // 日付の前に出力するということ
$ordered_columns['column_name'] = 'カラムの名前'; // key['column_name']は任意の文字列
}
$ordered_columns[$key] = $value;
}
return $ordered_columns;
}
add_filter( 'manage_edit-xxx_columns', 'my_add_columns' ); // xxxには投稿タイプ名を入れる
/**
* オリジナルのカラムに値を出力する
*/
function my_add_columns_content($column_name, $post_id) {
if( $column_name == 'column_name' ) { // 先ほど設定したkey
$something_id = get_field('something_id', $post_id); // ACF等で表示したいものの値をとってくる
if($something_id) {
$stitle = get_the_title($something_id);
}
}
if ( isset($stitle) && $stitle ) {
echo esc_attr($stitle); // 値が入っていれば出力
}
}
add_action( 'manage_xxx_posts_custom_column', 'my_add_columns_content', 10, 2 ); // xxxには投稿タイプ名を入れる
/**
* オリジナルのカラムにソートボタンをつける
*/
function sortable_column( $columns ) {
$columns['column_name'] = 'sort_name'; //
return $columns;
}
add_filter( 'manage_edit-xxx_sortable_columns', 'sortable_column' ); // xxxには投稿タイプ名を入れる
/**
* ソート時にクエリを書き換える
*/
function my_add_sort_by_meta( $query ) {
if ( $query->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
switch( $orderby ) {
case 'sort_name': // 上記で設定した値
$query->set( 'meta_key', 'sort_meta' ); // ソートしたいフィールド名
$query->set( 'orderby', 'meta_value_num' );
break;
}
}
}
add_action( 'pre_get_posts', 'my_add_sort_by_meta', 1 ); // 一覧で表示するpost取得前にqueryを書き換える
参考サイト
【WordPress】管理画面で、タクソノミーやカスタムフィールドの列を追加する(ソート機能付き) – 東京のホームページ制作 / WEB制作会社 BRISK
-
前の記事
WordPressでIDから記事の抜粋を取得する 2019.11.13
-
次の記事
wordpressでAjaxを使う方法 2019.12.18