カスタム投稿タイプ&タクソノミー・タグの追加
カスタム投稿タイプを追加するときは、いつも『Custom Post Type UI』にお世話になることが多かったのですが、色々とカスタム投稿タイプやタクソノミー、タームを弄る機会が増えてきたこともあり、柔軟に対処するにはやっぱ書いた方が早い時もあるなぁ。。ということで、カスタム投稿タイプの追加関連についての 覚書メモ。
functions.phpへカスタム投稿タイプの追加を記述する
<?php // カスタム投稿タイプを追加 add_action( 'init', 'custom_post_type' ); function custom_post_type() { register_post_type( 'news', // カスタム投稿タイプのスラッグ array( 'labels' => array( 'name' => __( 'お知らせ' ), // メニューに表示される名称 'singular_name' => __( 'お知らせ' ), // 単体系の名称 'add_new' => _x('新規追加', 'news'), 'add_new_item' => __('新規追加') ), 'public' => true, 'has_archive' => true, // アーカイブを有効に 'hierarchical' => false, // ページ階層の指定 'menu_position' =>5, // 管理画面上の配置指定 'menu_icon' => 'dashicons-wordpress', // アイコン指定 'supports' => array('title','editor','thumbnail','revisions') // サポート指定 ) ); } ?>
※メニューアイコンはDashicons一覧よりお好きなのを指定。
詳しいパラメーターなどは
関数リファレンス/register post type:WordPress Codex 日本語版
functions.phpへカスタムタクソノミーの追加を記述する
function add_taxonomy(){ register_taxonomy( 'news_cat', 'news', array( 'hierarchical' => true, //階層(trueでカテゴリー、falseでタグ) 'label' => 'お知らせカテゴリー', 'public' => true, 'show_ui' => true, 'show_admin_column' => true, //記事一覧に投稿に紐づくカテゴリーを出力 ) ); } add_action( 'init', 'add_taxonomy' );
ここまでで、記事一覧にも選択したカテゴリーが出力もされるのですが、あともうひと作業。このままだと、カテゴリーから記事検索が出来ない。
記事一覧でカスタムタクソノミーで検索が出来るようにする
add_action( 'restrict_manage_posts', 'add_custom_taxonomies_term_filter' ); function add_custom_taxonomies_term_filter() { global $post_type; if ( $post_type == 'news' ) { $taxonomy = 'news_cat'; wp_dropdown_categories( array( 'show_option_all' => 'すべてのカテゴリー', 'orderby' => 'name', 'selected' => get_query_var( $taxonomy ), 'hide_empty' => 0, 'name' => $taxonomy, 'taxonomy' => $taxonomy, 'value_field' => 'slug', ) ); } }
参考: [restrict_manage_posts]:Code Reference
追記:ブロックエディターに対応する場合
これまでクラシックエディターで運用していてWordPressを最新にバージョンアップ、エディターをブロックエディターメインにした場合、カスタム投稿がクラシックエディターのままになっていたりする場合がある。
その場合は以下のように追記する。
<?php // カスタム投稿タイプを追加 add_action( 'init', 'custom_post_type' ); function custom_post_type() { register_post_type( 'news', // カスタム投稿タイプのスラッグ array( 'labels' => array( 'name' => __( 'お知らせ' ), // メニューに表示される名称 'singular_name' => __( 'お知らせ' ), // 単体系の名称 'add_new' => _x('新規追加', 'news'), 'add_new_item' => __('新規追加') ), 'public' => true, 'has_archive' => true, // アーカイブを有効に 'hierarchical' => false, // ページ階層の指定 'menu_position' =>5, // 管理画面上の配置指定 'menu_icon' => 'dashicons-wordpress', // アイコン指定 'supports' => array('title','editor','thumbnail','revisions'), // サポート指定 'show_in_rest' => true, //ブロックエディターに対応させる場合に記述する ) ); } ?>