WordPressカスタマイズ事例

カスタム投稿タイプ、カスタム分類(タクソノミー)をつくる(だからそれって何よ?)

そもそもカスタム投稿タイプ、カスタム分類(タクソノミー)って何?ってところが説明不十分でしたので、今さらですが説明させてください。

WordPressでは、2種類のページパターンというか、そういうのがあります。

・固定ページ
 いわゆる静的ページというやつで、URL設定自由、他ページとは全く関係なく独立したページのこと

・投稿ページ
 ブログサイトでいえば記事、コーポレートサイトでいえばお知らせ、といった、あるグループ(カテゴリ)に属するページのことで、そのグループをまとめるアーカイブ(一覧)ページを持つことができる
 
ところが、ちょっと手の込んだサイトを作ろうとすると、
こんな要望が出てきます。
「商品を登録して一覧表示もしたい」
「セミナー情報を登録して、過去の開催アーカイブが欲しい」

どちらも種類的には投稿ページに属しますが、
デザインテンプレートが違ってくるし、管理画面的には独立したメニューにしたほうがよさそうだ、ってことになりますよね普通。

そういうときに3つ目、4つ目のページパターンを定義してあげるのが「カスタム投稿タイプ」というものです。
大きな特徴としては
・投稿ページのようにカテゴリを持つことができる、すなわちアーカイブページを持つことができる
・管理画面に独立したメニューを作ることができる
 
お分かりいただけましたでしょうか?
結構カスタム投稿タイプって需要あるんですよ。
 
では、そのカスタム投稿タイプを作ってみましょう。

テーマのfunction.phpに以下を記述します。

add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'products', /* カスタム投稿タイプスラッグ */
array(
'labels' => array( /* 表示させる文字 */
'name' => __( '製品' ),
'singular_name' => __( '製品' ),
'all_items' => '製品一覧',
'add_new' => '製品追加',
'add_new_item' => '製品の追加',
'edit_item' => '製品の編集',
'new_item' => '製品追加',
'view_item' => '製品を表示',
'search_items' => '製品を検索',
'not_found' =>  '製品が見つかりません',
'not_found_in_trash' => 'ゴミ箱内に製品が見つかりませんでした。',
'parent_item_colon' => ''
),
'public' => true, /* 管理画面にメニューを作る */
'show_ui' => true, /* 管理画面にメニューを作る */
'query_var' => true,
'hierarchical' => false, /* 固定ページみたいに記事間の親子関係をつくる */
'supports' => array('title','editor','thumbnail'), /* 管理画面で登録できる項目 */
'menu_position' =>5, /* 管理画面のメニューの位置(5,10,15・・・) */
'has_archive' => true, /* アーカイブページを持つ */
'rewrite' => array( /* slug:スラッグ名 with_front:アーカイブページURLに/archive/をつける */
'slug' => 'products','with_front' => false)
)
);
}

これで、「製品」というカスタム投稿タイプができあがりました。
※ ’public’についてはcodex見てもよくわかりませんが、trueで間違いないです。
 
 
次にこの「製品」にカテゴリを持たせたい!って当然なりますよね。
そんな時に使えるのが「カスタム分類(タクソノミー)」です。
カスタム分類を追加するとカテゴリ(カスタム分類の中では「ターム」と呼びます)を登録できるようになります。
 
では、カスタム分類を登録してみましょう。
上のソースの register_post_type に続けて記述しましょう。

add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'products',
//上の通り
);
register_taxonomy('products_cat','result', array(
'hierarchical' => true,
'labels' => array( /* 表示させる文字 */
'name' => 'カテゴリ',
'singular_name' => 'カテゴリ',
'search_items' =>  'カテゴリを検索',
'all_items' => 'すべてのカテゴリ',
'parent_item' => '親分類',
'parent_item_colon' => '親分類:',
'edit_item' => '編集',
'update_item' => '更新',
'add_new_item' => 'カテゴリを追加',
'new_item_name' => '名前',
),
'show_ui' => true, /* 管理画面にメニューを作る */
'rewrite' => array(
'slug' => 'products','with_front' => true,'hierarchical' => true)
));
}

最後の’rewrite’のところだけ補足すると

slug:カスタム投稿タイプと同じにしたほうがいいです。
理由は下の記事で言及してます。
SEO的観点からカスタムタクソノミー(カスタム分類)のスラッグをカスタム投稿タイプと同じにする

with_front:ここがよくわかっていませんが、いろいろ調べた結果 true で行くのが良いです。

hierarchical:カテゴリを階層構造にする
 
 
これにて、カテゴリを持つ新メニュー「製品」のできあがり。


関連するWordPressカスタマイズ事例