カスタム投稿の管理画面にターム名とタームでの絞り込みを追加する方法

functions.phpに色々追加してカスタム投稿・タクソノミーの準備はできたけど、投稿画面にタクソノミーに追加したタームの名前がない。。。

あと、日付だけじゃなくてタームで絞り込みしたい。。。

、、、っと思ったので、色々調べたら簡単にできたのでメモ。


ターム名を表示

以下のコードをfunctions.phpに追加することで、ターム名が表示できます。

//カスタム投稿画面にターム名を表示
function add_custom_column( $defaults ) {
$defaults[‘タクソノミー名'] = ‘管理画面に表示されるテキスト';
return $defaults;
}
add_filter('manage_posts_columns', 'add_custom_column');
function add_custom_column_id($column_name, $id) {
if( $column_name == ‘タクソノミー名' ) {
echo get_the_term_list($id, ‘タクソノミー名', '', ', ');
}
}
add_action('manage_posts_custom_column', 'add_custom_column_id', 10, 2);

ターム別ソート機能を追加

以下のコードをfunctions.phpに追加することで、追加したターム別にソート(絞り込む)機能を追加できます。

// カスタム投稿画面にターム別ソート機能を追加
add_action('restrict_manage_posts', function() {
    global $post_type;
    if ( !in_array($post_type, [‘カスタム投稿名']) ) return;
    $taxonomy = ‘タクソノミー名';
    $terms = get_terms($taxonomy);
    if ( empty($terms) ) return;
    $selected = get_query_var($taxonomy);
    $options = '';
    foreach ($terms as $term) {
        $options .= sprintf('<option value="%s" %s>%s</option>'
                ,$term->slug
                ,($selected==$term->slug) ? 'selected="selected"' : ''
                ,$term->name
        );
    }
    $select = '<select name="%s"><option value="">指定なし</option>%s</select>';
    printf($select, $taxonomy, $options);
});

こんな感じになるかと思います。

*間違えてタクソノミーと表示してあります。

以上、短い備忘録でした。



Posted

in