【WordPress】functions.phpからカスタム投稿タイプを登録する方法
functions.phpからカスタム投稿タイプを登録する方法をまとめてみた。
Index
カスタム投稿タイプ、カスタム分類、タームとは?
カスタム投稿タイプ(カスタムポストタイプ)
カスタム投稿タイプまたは、カスタムポストタイプっていう。
Wordpress管理画面の「投稿」と同じ機能を追加する時に使う。
例えば、デフォルトの投稿ではブログを投稿して、もう一つお知らせという投稿をブログと同じように別で投稿管理したい時にカスタム投稿を登録する。
カスタム分類(カスタムタクソノミー)
カスタム分類または、カスタムタクソノミーっていう。
Wordpress管理画面の「カテゴリー」や「タグ」と同じ機能を追加する時に使う。
名称は「カテゴリー」や「タグ」とは限らず任意に設定でき、カテゴリーのように階層を持たすこともできるし、タグのように単一扱う設定もできる。
例えば不動産系の案件で物件を登録する為にカスタム投稿を追加した場合、カスタム分類名は「エリア」とか「間取り」とした表記にするなど。
ちなみにカスタム分類は何個でも登録できる。
ターム
タームは、カスタム分類に登録されている項目の名前。下の画像の赤枠部分をタームと呼ぶ。
ついついタームの部分をカテゴリー、タグと言ってしまうのでこんがらがりやすい。ちゃんと登録項目はタームと覚えよう。
×カテゴリー、タグ = worpress,PHP
○ターム = worpress,PHP
カスタム投稿タイプをfunctioins.phpに登録する
カテゴリーとタグの機能付きの「お知らせ」というカスタム投稿を登録
// create custom post type(お知らせ)
function news_custom_post_type(){
$labels = array(
'name' => _x('お知らせ', 'post type general name'),
'singular_name' => _x('お知らせ', 'post type singular name'),
'add_new' => _x('新規追加', 'news'),
'add_new_item' => __('お知らせ'),
'edit_item' => __('編集'),
'new_item' => __('新規お知らせ'),
'view_item' => __('表示'),
'search_items' => __('項目検索'),
'not_found' => __('記事が見つかりません'),
'not_found_in_trash' => __('ゴミ箱に記事はありません'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => 4,
'has_archive' => true,
'rewrite' => array( 'slug' => 'news'),
'supports' => array('title','editor','thumbnail')
);
register_post_type('news',$args);
$args = array(
'label' => 'カテゴリー',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_admin_column' => true,
'hierarchical' => true,
'query_var' => true
);
register_taxonomy('news_cat','news',$args);
$args = array(
'label' => 'タグ',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_admin_column' => true,
'show_ui' => true,
'hierarchical' => false,
'query_var' => true
);
register_taxonomy('news_tag','news',$args);
}
add_action('init', 'news_custom_post_type');
【解説】カスタム投稿タイプ名を「お知らせ」としパラメーターを「news」で登録
// create custom post type(お知らせ)
function news_custom_post_type(){
$labels = array(
'name' => _x('お知らせ', 'post type general name'),
'singular_name' => _x('お知らせ', 'post type singular name'),
'add_new' => _x('新規追加', 'news'),
'add_new_item' => __('お知らせ'),
'edit_item' => __('編集'),
'new_item' => __('新規お知らせ'),
'view_item' => __('表示'),
'search_items' => __('項目検索'),
'not_found' => __('記事が見つかりません'),
'not_found_in_trash' => __('ゴミ箱に記事はありません'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => 4,
'has_archive' => true,
'rewrite' => array( 'slug' => 'news'),
'supports' => array('title','editor','thumbnail')
);
register_post_type('news',$args);
(省略)
}
add_action('init', 'news_custom_post_type');
【解説】カスタム分類1の名称を「カテゴリー」、パラメーターを「news_cat」で登録
$args = array(
'label' => 'カテゴリー',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_admin_column' => true,
'hierarchical' => true,
'query_var' => true
);
register_taxonomy('news_cat','news',$args);
【解説】カスタム分類2の名称を「タグ」、パラメーターを「news_tag」で登録
$args = array(
'label' => 'タグ',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_admin_column' => true,
'show_ui' => true,
'hierarchical' => false,
'query_var' => true
);
register_taxonomy('news_tag','news',$args);
カスタム投稿のURLと使用されるテンプレート
カスタム投稿タイプ一覧ページ
「○○○」の部分はカスタムと投稿で設定したカスタム投稿名のパラメータを入れる。
※上の例でいうとarchive-news.phpになる。
archive-○○○.php
カスタム投稿タイプの記事ページ
「○○○」の部分はカスタムと投稿で設定したカスタム投稿名のパラメータを入れる。
※上の例でいうとsingle-news.phpになる。
single-○○○.php
カスタム分類のターム一覧ページ
「○○○」の部分はカスタムと投稿で設定したカスタム分類名のパラメータを入れる。
※上の例でいうとtaxonomy-news_cat.phpとtaxonomy-news_tag.phpの2つになる。
taxonomy-○○○.php
まとめ
毎回カスタム投稿タイプを登録する時に、WordPress Codex見に行かなくていいように書いておく。
WordPress Codex
カスタム投稿を設定したらこちらも
【WordPress】カスタムタクソノミーの一覧ページのスラッグをカスタム投稿タイプと同じにした時の404を回避する方法