MENU

functions.phpからカスタム投稿タイプを登録する方法

functions.phpからカスタム投稿タイプを登録する方法をまとめてみた。

カスタム投稿タイプ、カスタム分類、タームとは?

カスタム投稿タイプ(カスタムポストタイプ)

カスタム投稿タイプまたは、カスタムポストタイプっていう。
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