WordPressの初期状態では、通常の投稿と違い、管理画面のカスタム投稿一覧にタクソノミー(カテゴリー)は表示されません。
下記はデモで作成した「メニュー」というカスタム投稿ですが、管理画面を開くとタクソノミー(カテゴリー)は表示されていません。
タクソノミー(カテゴリー)が表示された方が管理しやすいですし、何より見た目が殺風景ですよね・・・。
今回お伝えする方法を実践すると、下記のようにカスタム投稿一覧の管理画面にタクソノミー(カテゴリー)を表示させることができます。
また、必要に応じて「絞り込み検索」も付けることができます。
コピペとちょっとした修正で完成するので、ぜひやってみてください。
管理画面のカスタム投稿一覧にタクソノミー(カテゴリー)を表示させる方法
管理画面のカスタム投稿一覧にタクソノミー(カテゴリー)を表示させるには、下記コードをfunctions.phpにコピペして、{タクソノミースラッグ}と{カスタム投稿タイプスラッグ}の部分を書き換えればOKです。
functions.php
<?php
//※ここから先をコピペ
function my_custom_column($columns) {
$columns['{タクソノミースラッグ}'] = 'カテゴリ';
return $columns;
}
add_filter('manage_{カスタム投稿タイプスラッグ}_posts_columns', 'my_custom_column');
function my_custom_column_id($column_name, $id) {
$terms = get_the_terms($id, $column_name);
if($terms && !is_wp_error($terms)) {
$menu_terms = array(); //変数名は任意
foreach($terms as $term) {
$menu_terms[] = $term->name;
}
echo join( ", ", $menu_terms);
}
}
add_action('manage_{カスタム投稿タイプスラッグ}_posts_custom_column', 'my_custom_column_id', 10, 2);
僕が作ったデモを例に解説しますね。
コピペしたコードにカスタム投稿タイプスラッグとタクソノミースラッグを入力する
上記コードの該当箇所に、カスタム投稿タイプスラッグとタクソノミースラッグを入力します。
今回僕がデモで作ったカスタム投稿は下記になります。
- カスタム投稿タイプスラッグ:menu-item
- タクソノミースラッグ:genre
先ほどfunctions.phpにコピペしたコードの該当箇所を、上記に書き換えれば作業完了です。
<?php
function my_custom_column($columns) {
$columns['genre'] = 'カテゴリ';
return $columns;
}
add_filter('manage_menu-item_posts_columns', 'my_custom_column');
function my_custom_column_id($column_name, $id) {
$terms = get_the_terms($id, $column_name);
if($terms && !is_wp_error($terms)) {
$menu_terms = array();
foreach($terms as $term) {
$menu_terms[] = $term->name;
}
echo join( ", ", $menu_terms);
}
}
add_action('manage_menu-item_posts_custom_column', 'my_custom_column_id', 10, 2);
なお、2行目の'カテゴリ'の部分は、好きな名前に変えてOKです。
たとえば'料理ジャンル'に変えると、管理画面の表示も変わります。
$columns['genre'] = '料理ジャンル';
タクソノミーに絞り込み検索機能を付ける
ここまででカスタム投稿のタクソノミーを管理画面に表示させることができましたが、更に絞り込み検索機能を付けたいという要望も実務でたまにあります。
その場合は、先ほどのコードに加えて、下記を記述すればOKです(コードがやや難解なのでコピペ推奨です)。
<?php
//※ここから先をコピペ
function my_add_filter(){
global $post_type;
if ('{カスタム投稿タイプ}' == $post_type) {
?>
<select name="{タクソノミースラッグ}">
<option value="">すべてのカテゴリー</option>
<?php
$terms = get_terms('{タクソノミースラッグ}');
foreach ($terms as $term) {
?>
<option value="<?php echo $term->slug; ?>"<?php if (isset($_GET['{タクソノミースラッグ}']) && $_GET['{タクソノミースラッグ}'] == $term->slug) {
print 'selected';
} ?>><?php echo $term->name; ?>
</option>
<?php
}
?>
</select>
<?php
}
}
add_action('restrict_manage_posts', 'my_add_filter');
すると、下記のように「絞り込み検索」のセレクトボックスが現われ、タクソノミー(カテゴリ)別にカスタム投稿を絞り込めるようになります。