この実装、面倒なら代行します
そもそもカスタム投稿タイプ、カスタム分類(タクソノミー)って何?ってところが説明不十分でしたので、今さらですが説明させてください。
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:カテゴリを階層構造にする
これにて、カテゴリを持つ新メニュー「製品」のできあがり。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。