WordPressのカスタムタクソノミー(カスタム分類)の作成と表示
投稿タイプの記事に独自のカテゴリーをつけて分類する事ができます。カスタムタクソノミーと呼ばれます。新規作成と表示方法です。
カスタムタクソノミーを新規作成する
カスタムタクソノミーで新しい分類を作るにはregister_taxonomy();を使用します。
<?php register_taxonomy('分類名', 'タクソノミーを使う投稿タイプ名', $args); ?>
$argsに入る引数(配列)
‘label’ 管理画面に表示されるタクソノミー名(必須項目)
‘public’ trueの場合はタクソノミーをダッシュボードに表示する。(デフォルトはtrue)
‘show_ui’ ダッシュボードに表示する(デフォルトはtrue)
‘hierarchical’ 階層構造で管理する。trueでカテゴリーの形式 falseでタグの形式
‘show_tagcloud’ タグの形式でタクソノミーを作成した場合に管理画面にタグクラウドを表示する。(hierarchicalをfalseにした場合に表示)
‘rewrite’ 個別ページのurlをダッシュボードでデフォルトより変更している場合それに従う(デフォルトはtrue)
‘query_var’ 個別ページの urlを指定。true→http://サイトurl/?投稿タイプ名=記事のスラッグ。false→http://サイトurl/?post_type=投稿タイプ名&p=記事のid
‘capabilities’ カスタム分類を操作できるユーザーの権限
使用例
‘texture’の名前のカスタム投稿タイプに’material’という名前で分類を作るには、以下のようにfunction.phpに記入します。
<?php register_taxonomy( 'material', // カスタム分類の名前 'texture', // カスタム投稿の名前 array( 'label' => '素材別の分類', // 管理画面などで表示される名前 ) ); ?>
これでダッシュボードの投稿タイプの箇所に項目が追加されます。
ダッシュボード内で、例えば、”紙”や”植物”のようなカテゴリーを作れるようになります。
もしカスタム分類をタグの様に扱いたい場合は以下の様にfunction.phpに記入します。
<?php register_taxonomy( 'material', // カスタム分類の名前 'texture', // カスタム投稿の名前 array( 'label' => '素材別の分類', // 管理画面などで表示される名前 'hierarchical' => false, // 階層構造で管理するかどうか 'show_tagcloud' => true, //管理画面へタグクラウドを表示するかどうか ) ); ?>
カスタムタクソノミーを表示する
カスタム分類の一覧(アーカイブページへのリンク付き)を表示する
サイドバーなどに表示するカテゴリー一覧のように、分類の一覧を表示する方法です。
カテゴリーの取得と同じように wp_list_categorie(); を使用します。
下記のように表示したい場所へ記入します。リスト形式で表示されるのでulでマークアップします。
<ul> <?php wp_list_categories( array( 'title_li' => '', // タイトルに何も入れない 'taxonomy' => 'texture', // カスタム分類名を入れる 'show_count' => 1 , // 記事数を表示するかどうか。表示しない時は0 )); ?> </ul>
※カスタムタクソノミーのアーカイブページを表示するにはtaxonomy.phpという名前のテンプレートが必要になります。
その投稿が属するカスタム分類(アーカイブページへのリンク付き)を表示する
個別ページの記事情報などで、その投稿がどの分類にされているかを表示する方法です。
カスタムタクソノミー名を取得するにはget_the_term_list()関数を使用します。
get_the_term_list()の基本的な使い方
<?php get_the_term_list( $post->ID, 'タクソノミー名' , $before, $sep, $after ); ?>
$post->ID, 記事IDが入ります。(必須)
‘タクソノミー名’ タクソノミー名が入ります。(必須)
$beforeは分類名の前に入る文字列、$sepは区切り文字、$afterは分類名の後に入る文字列が入ります。
投稿が属する分類を表示するには表示したい場所へ下記のように記入します。
<?php echo get_the_term_list( $post->ID, 'タクソノミー名' ); ?>
ulのリスト形式で表示するには下記のように記入します。
<?php echo get_the_term_list( $post->;ID, 'タクソノミー名', '<ul><li>', '</li><li>;', '</li></ul>' ); ?>
カスタムタクソノミーのカテゴリー・タグ情報を取得
カスタムタクソノミーのカテゴリー・タグ情報を取得するにはget_term_by()関数を使用します。
get_term_by()で取得したデータはphpのオブジェクトの形式で出力されるので、取得したデータを表示するにはechoでデータを表示します。
<?php get_term_by( $field, $value, $taxonomy, $output, $filter ) ?>
$field ’slug’, ‘name’, ‘id’のどれか。デフォルトはid( 必須 )
$value スラッグ( 必須 )
$taxonomy タクソノミー名( 必須 )
$output 出力する形。指定がなければOBJECT
$filter フィルター名
•phpのオブジェクトで取得するデータは下記です。
[term_id] => // ID
[name] => // 名前
[slug] => // スラッグ
[term_group] => 0 // グループ
[term_taxonomy_id] => 9 // タームID
[taxonomy] => // タクソノミー
[description] => // 概要
[parent] => // 階層形式
[count] => // 記事数
下のコードではカスタム分類の’ニュース’という名前の情報を取得できます。
get_term_by('name', 'news', 'my_custom_taxonomy')
カスタムタクソノミーのタイトル(のみ)を表示する
single_term_title()を使用してタイトルを表示する事ができます。
<?php single_term_title( $prefix, $display ); ?> //$prefixはタイトルの前に出力するテキストを指定。 //$displayはtrueでphpの形式で出力 デフォルトはfalse
細かいですが、register_taxonomyの引数へのコメントで「カスタム投稿」と「カスタム分類」が逆になっていますよ。
Miyazaki さま
教えて下さってありがとうございました!
修正しました!