WordPressをCMSとして活用する場合、
カスタム投稿タイプカスタムタクソノミーを組み合わせた構成はよく使われます。

ですが、カスタム投稿タイプの管理一覧は、デフォルトでは「タイトル」と「日時」しか表示されません。
タクソノミーを設定していても一覧に見えないため、記事が増えるほど管理が煩雑になっていきます。

そこで、この記事では、カスタム投稿タイプの管理一覧にタクソノミーをカラム表示する方法基本から応用まで解説します。

  • 通常投稿との違い(フック名)
  • タクソノミーを1つカラムに追加する
  • 複数のタクソノミーを同時に表示する
  • タクソノミーで絞り込み検索を追加する
  • カラムの表示順を変更する

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

通常投稿との違い:フック名にスラッグが入る

通常投稿の場合、manage_posts_columnsなどの汎用フックを使います。
ですが、カスタム投稿タイプの場合はフック名に投稿タイプのスラッグが入ります。

対象カラム追加フックカラム表示フック
通常投稿manage_posts_columnsmanage_posts_custom_column
カスタム投稿manage_{スラッグ}_posts_columnsmanage_{スラッグ}_posts_custom_column

スラッグ付きフックを使うことで、そのカスタム投稿タイプの一覧だけに設定を適用できます。
他の投稿タイプの一覧に影響しないのが大きなメリットです。

基本:タクソノミーを1つ追加する

例として以下の構成で解説します。

  • カスタム投稿タイプ:賃貸物件(スラッグ:rent
  • カスタムタクソノミー:駅(スラッグ:station

// カラムのヘッダーを追加
function rent_add_station_column( $columns ) {
    $columns['station'] = '駅名';
    return $columns;
}
add_filter( 'manage_rent_posts_columns', 'rent_add_station_column' );

// カラムの中身を表示
function rent_add_station_column_data( $column_name, $post_id ) {
    if ( $column_name === 'station' ) {
        $terms = get_the_terms( $post_id, 'station' );
        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_rent_posts_custom_column', 'rent_add_station_column_data', 10, 2 );

関数名の重複に注意!

functions.phpに同じ名前の関数が複数あるとエラーになります。
投稿タイプのスラッグを関数名の接頭辞にする(例:rent_)習慣をつけておくと、複数の投稿タイプを扱う際に名前の衝突を防げます。

応用①:複数のタクソノミーを同時に表示する

「賃貸物件」に「駅」と「エリア」の2つのタクソノミーがある場合など、
複数タクソノミーを連想配列でまとめて管理すると、コードがスッキリします。

function rent_add_taxonomy_columns( $columns ) {
    $columns['station'] = '駅名';
    $columns['area']    = 'エリア';
    return $columns;
}
add_filter( 'manage_rent_posts_columns', 'rent_add_taxonomy_columns' );

function rent_add_taxonomy_columns_data( $column_name, $post_id ) {
    // カラム名とタクソノミースラッグのマッピング
    $taxonomy_map = array(
        'station' => 'station',
        'area'    => 'area',
    );

    if ( array_key_exists( $column_name, $taxonomy_map ) ) {
        $terms = get_the_terms( $post_id, $taxonomy_map[ $column_name ] );
        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_rent_posts_custom_column', 'rent_add_taxonomy_columns_data', 10, 2 );

$taxonomy_mapの配列に追記するだけでタクソノミーを増やせるため、
後から変更が入っても関数本体を書き直す必要がありません。

応用②:タクソノミーで絞り込み検索を追加する

一覧にカラムが表示されるようにできれば、次は、絞り込みセレクトボックスも追加すると管理がさらに快適になります。
複数のタクソノミーに対応したループ処理で書いています。

function rent_add_taxonomy_filters() {
    global $post_type;
    if ( $post_type !== 'rent' ) return;

    // 絞り込みたいタクソノミーをここに追加
    $taxonomies = array(
        'station' => '駅名で絞り込む',
        'area'    => 'エリアで絞り込む',
    );

    foreach ( $taxonomies as $taxonomy => $placeholder ) {
        $terms = get_terms( array(
            'taxonomy'   => $taxonomy,
            'hide_empty' => false,
        ) );
        if ( empty( $terms ) || is_wp_error( $terms ) ) continue;

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

        echo '<select name="' . esc_attr( $taxonomy ) . '">';
        echo '<option value="">' . esc_html( $placeholder ) . '</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', 'rent_add_taxonomy_filters' );

応用③:カラムの表示順を変更する

追加したカラムはデフォルトで右端に表示されます。
「タイトル」の直後など任意の位置に挿入したい場合は、
配列を一度再構築する方法が有効です。

function rent_reorder_columns( $columns ) {
    $new_columns = array();
    foreach ( $columns as $key => $label ) {
        $new_columns[ $key ] = $label;
        // タイトルの直後にタクソノミーカラムを挿入
        if ( $key === 'title' ) {
            $new_columns['station'] = '駅名';
            $new_columns['area']    = 'エリア';
        }
    }
    return $new_columns;
}
add_filter( 'manage_rent_posts_columns', 'rent_reorder_columns' );

$key === ‘title’の部分を変えることで、任意のカラムの前後に挿入位置を調整できます。

まとめ

今回は、WordPress管理画面において、カスタム投稿タイプの一覧画面にタクソノミーを表示する方法をまとめました。

  • カスタム投稿タイプのフックは manage_{スラッグ}_posts_columnsmanage_{スラッグ}_posts_custom_column
  • 複数タクソノミーは 連想配列($taxonomy_map)でまとめて管理するとスッキリ書ける
  • 絞り込みセレクトは restrict_manage_posts フック+ループで複数対応できる
  • カラム順の制御は foreachで配列を再構築して任意の位置に挿入する
  • 関数名には 投稿タイプスラッグを接頭辞にして名前の衝突を防ぐ
  • 編集は 必ず子テーマのfunctions.phpで行うこと

カスタム投稿タイプの管理画面を整えるだけで、クライアントの操作性が大きく変わります。ぜひ実装してみてください。

👉 通常の投稿一覧へのタクソノミー表示は、フックの書き方がシンプルになります。
基本的な実装方法はこちらで解説しています。
【関連記事】WordPress投稿一覧にタクソノミーを表示する方法