カスタム投稿タイプの一覧画面にタクソノミーを表示したい

WordPressでカスタム投稿タイプを使っている場合、管理画面の一覧でカスタムタクソノミー(カテゴリやタグ)を表示したいことがよくあります。

タクソノミー登録時にshow_admin_columnパラメータを設定すれば表示されるはずですが、正しく動作しないケースがあります。

show_admin_columnが効かない理由

show_admin_columnタクソノミー登録のトップレベル引数として設定する必要があります。

register_taxonomy('eccube-category', array('eccube'), array(
    'hierarchical' => true,
    'show_admin_column' => true,  // ここに配置
    'labels' => array(
        'name' => "EC-CUBEカスタマイズカテゴリ",
        // labelsの中ではなく外に配置する
    ),
));

もしlabels配列の中に書いていた場合は、WordPressが認識できず表示されません。

確実な方法:フィルターフックを使う

show_admin_columnが効かない場合や、より柔軟な制御をしたい場合は、WordPressのフィルターフックを使います。

カラムを追加する

add_filter('manage_eccube_posts_columns', function($columns) {
    $new_columns = array();
    foreach ($columns as $key => $value) {
        $new_columns[$key] = $value;
        if ($key === 'title') {
            $new_columns['eccube-category'] = 'EC-CUBEカテゴリ';
        }
    }
    return $new_columns;
});

このコードで、タイトルカラムの右側に「EC-CUBEカテゴリ」カラムが追加されます。

カラムの内容を表示する

add_action('manage_eccube_posts_custom_column', function($column_name, $post_id) {
    if ($column_name === 'eccube-category') {
        $terms = get_the_terms($post_id, 'eccube-category');
        if ($terms && !is_wp_error($terms)) {
            $term_names = array();
            foreach ($terms as $term) {
                $term_names[] = esc_html($term->name);
            }
            echo implode(', ', $term_names);
        } else {
            echo '—';
        }
    }
}, 10, 2);

このコードで、各投稿に設定されているタクソノミーのタームを表示します。設定されていない場合は「—」を表示します。

応用:カラムの位置を変更する

カラムを追加する位置は自由に変更できます。例えば、最後に追加したい場合:

add_filter('manage_eccube_posts_columns', function($columns) {
    $columns['eccube-category'] = 'EC-CUBEカテゴリ';
    return $columns;
});

特定のカラムの前に挿入したい場合は、配列の順序を制御します。

まとめ

  • show_admin_columnはトップレベル引数として設定する
  • labels配列の中に書くと認識されない
  • 確実に表示したい場合はmanage_{post_type}_posts_columnsフィルターを使う
  • カラムの内容はmanage_{post_type}_posts_custom_columnアクションで出力する

この方法を使えば、カスタム投稿タイプの管理画面をより使いやすくカスタマイズできます。

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

カスタマイズに関するお問い合わせはこちら