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