WordPress
カスタマイズ事例

WORDPRESS CUSTOMIZATION

カスタム投稿タイプ、カスタム分類(タクソノミー)をつくる(そもそもそれって何なのか?も含めて)

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

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

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

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

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

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

テーマのfunctions.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:カテゴリを階層構造にする
 
 
これにて、カテゴリを持つ新メニュー「製品」のできあがり。

【100ウェブ新着情報メルマガ】

WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!