カスタム投稿タイプ&タクソノミー・タグの追加

カスタム投稿タイプを追加するときは、いつも『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, //ブロックエディターに対応させる場合に記述する
    )
  );
}
?>