カスタム投稿一覧の管理画面って、普通の投稿と違ってカテゴリ表示がないので、見にくいですよね。
今回は、管理画面のカスタム投稿一覧にタクソノミー(カテゴリ)の列を表示させます。

カスタム投稿タイプがひとつの場合と、複数のカスタム投稿タイプを設定していて、それぞれに反映させる場合では、書き方が変わってきます。
複数のカスタム投稿タイプで、異なるタクソノミーラベル表示をしたくて調べていたのですが、
なかなか参考になるものがなかったので、備忘録の意味も含め、
後述で「複数のカスタム投稿タイプを設定している場合」も記載します。

まずはカスタム投稿タイプがひとつの場合

今回は

投稿タイプ
スラッグ
投稿タイプ
ラベル
タクソノミー
スラッグ
タクソノミー
ラベル
blog ブログ blog_cat ブログカテゴリ

の例で解説していきます。

「functions.php」に記述を追加していきます。
「functions.php」の扱いには、十分注意して下さい。記述を間違えるとサイトが閲覧できなくなったりします。
変更前は必ずバックアップを保持しておくようお勧めします。
function add_custom_column( $defaults ) {
$defaults['blog_cat'] = 'ブログカテゴリ';
return $defaults;
}
add_filter('manage_posts_columns', 'add_custom_column');
function add_custom_column_id($column_name, $id) {
if( $column_name == 'blog_cat' ) {
echo get_the_term_list($id, 'blog_cat', '', ', ');
}
}
add_action('manage_blog_posts_custom_column', 'add_custom_column_id', 10, 2);

2行日目の【$defaults['blog_cat'] = 'ブログカテゴリ';】
→「blog_cat」にタクソノミースラッグを入れ、「ブログカテゴリ」が管理画面に表示されるタクソノミーラベルになるので置き換えてください。

7行日目の【if( $column_name == 'blog_cat' ) {】
→「blog_cat」にタクソノミースラッグを入れます。

8行日目の【echo get_the_term_list($id, 'blog_cat', '', ', ');】
→ここも「blog_cat」をタクソノミースラッグに。

11行日目【manage_blog_posts_custom_column】
→「blog」の部分に投稿タイプスラッグを入れます。

これで、カスタム投稿タイプ「ブログ」の管理画面に「ブログカテゴリ」が表示されます。

2020-08-24-18

複数のカスタム投稿タイプを設定している場合

基本的には、ひとつの場合と同じですが、要所を「if分岐」して記述します。

投稿タイプ
スラッグ
投稿タイプ
ラベル
タクソノミー
スラッグ
タクソノミー
ラベル
blog ブログ blog_cat ブログカテゴリ
diary 日記 diary_day 曜日

上述の例に「2」の日記を追加した複数のカスタム投稿タイプがあると仮定して説明します。
上述の記載は削除して下記のように書き換えます。

function add_custom_column( $defaults ) {
    global $post_type;
    if ( 'blog' == $post_type ) {
        $defaults['blog_cat'] = 'ブログカテゴリ';
    }
    elseif ( 'diary' == $post_type ) {
        $defaults['diary_day'] = '曜日';
    }
    return $defaults;
}
add_filter('manage_posts_columns', 'add_custom_column');
function add_custom_column_id($column_name, $id) {
if( $column_name == 'blog_cat' ) {
echo get_the_term_list($id, 'blog_cat', '', ', ');
}
elseif( $column_name == 'diary_day' ) {
echo get_the_term_list($id, 'diary_day', '', ', ');
}
}
add_action('manage_blog_posts_custom_column', 'add_custom_column_id', 10, 2);
add_action('manage_diary_posts_custom_column', 'add_custom_column_id', 10, 2);

2行目で投稿タイプの if分岐に備えます。

3行目【'blog' == $post_type】
→投稿タイプスラッグが「blog」の場合

4行目 タクソノミースラッグ(blog_cat)とラベル(ブログカテゴリ)を紐付けます。

同様に

6行目【'diary' == $post_type】
→投稿タイプスラッグが「diary」の場合

7行目 タクソノミースラッグ(diary_day)とラベル(曜日)を紐付けます。

13行目【$column_name == 'blog_cat'】
→もしタクソノミースラッグが「blog_cat」の場合

14行目【blog_cat'】
→「blog_cat」内のタームを呼び出します。

16行目【$column_name == 'diary_day'】
→もしタクソノミースラッグが「diary_day」の場合

17行目【diary_day'】
→「diary_day」内のタームを呼び出します。

20行目【'manage_blog_posts_custom_column'】
→「blog」の部分に投稿タイプスラッグを入れます。

21行目【'manage_diary_posts_custom_column'】
→「diary」の部分にもう一つの投稿タイプスラッグを入れます。

これで、「ブログ」の管理画面に「ブログカテゴリ」
「日記」の管理画面に「曜日」の列が追加されます。

まとめ

いかがでしたか。管理画面が使いやすくなりましたね。
複数設定した場合の記事があまりなかったので、今回は備忘録の意味も含めて残しておきます。

*「function.php」は、必ずバックアップを取ってから作業して下さいね。