WordPressでカスタムタクソノミーを使っていると、

  • 投稿一覧を見ても、どの記事にどのタクソノミーが設定されているか分からない
  • いちいち記事を開いて確認するのが手間

という場面に遭遇することがあります。

そこで、この記事では、通常の投稿一覧にタクソノミーをカラム表示する方法を解説します。
functions.phpにコードを追加するだけで実現できます。

カスタムタクソノミーを利用してWordPressを運用されている方は、ぜひ参考にしてください。

ちなみに、今回は、通常の投稿一覧におけるタクソノミーの表示です。
カスタム投稿タイプの一覧画面にタクソノミーを追加したい場合は、フックの書き方が異なるので、以下の記事を参考にしてください。
👉 WordPressカスタム投稿タイプの一覧にタクソノミーを表示する方法

タクソノミーをカラムに追加するしくみ

WordPressの管理画面にカラムを追加するには、2つのフックを使います。

  • manage_posts_columns:カラムのヘッダー(列名)を追加するフィルター
  • manage_posts_custom_column:カラムの中身(各行の値)を出力するアクション

この2つをセットでfunctions.phpに記述するのが基本の流れです。
まず、この2つのフックを使った基本的なコードの書き方を、次の章で紹介します。

基本のコード

例として、スラッグ「genre」・ラベル「ジャンル」というタクソノミーを
投稿一覧に表示してみます。

// カラムのヘッダーを追加
function add_genre_column( $columns ) {
    $columns['genre'] = 'ジャンル';
    return $columns;
}
add_filter( 'manage_posts_columns', 'add_genre_column' );

// カラムの中身を表示
function add_genre_column_data( $column_name, $post_id ) {
    if ( $column_name === 'genre' ) {
        $terms = get_the_terms( $post_id, 'genre' );
        if ( $terms && ! is_wp_error( $terms ) ) {
            $term_names = array_map( function( $term ) {
                return esc_html( $term->name );
            }, $terms );
            echo implode( ' / ', $term_names );
        } else {
            echo '—';
        }
    }
}
add_action( 'manage_posts_custom_column', 'add_genre_column_data', 10, 2 );

‘genre’の部分をご自身のタクソノミースラッグに変更してください。

このコードをfunctions.phpに追加すると、
投稿一覧に「ジャンル」カラムが追加され、各記事に設定されたタームが表示されます。

is_wp_error()チェックについて

get_the_terms()は、タームが設定されていない場合にfalseを、
エラー時にWP_Errorオブジェクトを返すことがあります。
is_wp_error()で確認してから出力することで、エラーが画面に表示されるのを防げます。

絞り込み検索を追加する

カラム表示に加えて、タクソノミーで投稿を絞り込めるセレクトボックスを追加すると
管理画面がさらに使いやすくなります。

function add_genre_filter() {
    global $post_type;
    if ( $post_type !== 'post' ) return;

    $terms = get_terms( array(
        'taxonomy'   => 'genre',
        'hide_empty' => false,
    ) );
    if ( empty( $terms ) || is_wp_error( $terms ) ) return;

    $selected = isset( $_GET['genre'] )
        ? sanitize_text_field( $_GET['genre'] )
        : '';

    echo '<select name="genre">';
    echo '<option value="">ジャンルで絞り込む</option>';
    foreach ( $terms as $term ) {
        printf(
            '<option value="%s"%s>%s</option>',
            esc_attr( $term->slug ),
            selected( $selected, $term->slug, false ),
            esc_html( $term->name )
        );
    }
    echo '</select>';
}
add_action( 'restrict_manage_posts', 'add_genre_filter' );

👉 $post_type !== ‘post’ の条件を入れることで、
通常投稿の一覧画面のみにセレクトボックスを表示できます。

まとめ

今回は、WordPress管理画面の投稿一覧画面にタクソノミーの表示を追加する方法をまとめました。

  • カラム追加は manage_posts_columnsmanage_posts_custom_column の2つのフックを使う
  • タームの出力は is_wp_error()チェックを入れておくと安全
  • 絞り込みセレクトは restrict_manage_posts フックで追加できる
  • 編集は 必ず子テーマのfunctions.phpで行うこと

今回紹介したコードを追加するだけで、WordPressの管理画面の使いやすさが大きく変わります。
ぜひ試してみてください。

カスタム投稿タイプの一覧に表示したい場合は、フックの書き方が変わります。
複数タクソノミーの同時表示や絞り込みの応用方法もあわせて解説しています。
👉 【関連記事】WordPressカスタム投稿タイプの一覧にタクソノミーを表示する方法