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

Related Article

2 Comments & Tracbacks

  • Yuya Miyazaki 2013-04-23 5:21 PM

    細かいですが、register_taxonomyの引数へのコメントで「カスタム投稿」と「カスタム分類」が逆になっていますよ。

    Reply

    • saori 2013-04-23 6:46 PM

      Miyazaki さま

      教えて下さってありがとうございました!
      修正しました!

      Reply

Leave a Comment

Emailは公開されません。*は必須項目です。


*


Categorys

Tags

CSS3 ダッシュボード ヘッダー トラブル コードサンプル コンテンツ スライドショー jQueryプラグイン php 引っ越し 素材 お知らせ JavaScript Facebook CSS カテゴリー 投稿タイプ IE HTML5 Shareボタン seo レスポンシブ Photoshop タクソノミー ナビゲーション カスタムメニュー Git Macアプリ サイドバー WPセキュリティ SVG iTunes PHPリファレンス API WP使い方 query_posts データベース get_posts() 条件分岐 コメント function RSS スマートフォン Sass/Compass さくらVPS