カスタム投稿タイプとカスタム分類を組み合わせる(その1)

WordPress 3.0のカスタム投稿タイプの機能では、カスタム投稿を「カスタム分類」という機能で分類することができます。
この方法を紹介します。

1.カスタム分類とは?

WordPressでは、ブログの投稿をカテゴリーとタグで分類することができます。
ただ、扱うデータ構造によっては、カテゴリーとタグ以外の分類方法を追加したいこともあり得ます。
例えば、賃貸の物件だと、地域や間取りといった分類方法が考えられます。

そこで、WordPressでは、「カスタム分類」という機能があります。
カスタム分類は、タグ/カテゴリー以外の分類方法を追加する機能です。
「地域」や「間取り」といった分類を追加することができます。

また、カスタム分類では、カテゴリーのように階層がある分類と、タグのように階層がない分類を作ることができます。

2.カスタム投稿タイプとカスタム分類を組み合わせる

カスタム分類は、カスタム投稿タイプと組み合わせることができます。
前述の例だと、「物件」というカスタム投稿タイプを追加し、それを「地域」や「間取り」のカスタム分類で分類する、といった使い方が考えらえられます。

以下の画面は、「物件」のカスタム投稿タイプに、「地域」と「間取り」のカスタム分類を追加した場合の、物件作成の画面の例です。
地域は階層あり(カテゴリー型)、間取りは階層なし(タグ型)にしています。

地域と間取りのカスタム分類を追加した物件の作成画面

また、地域/間取りのカスタム分類の編集等は、カテゴリ/タグと同様の画面で行うことができます。

地域の編集

間取りの編集

3.カスタム投稿タイプ/カスタム分類を追加するコードの例

カスタム分類を追加するには、「register_taxonomy」という関数を使います。
以下のリストは、「物件」のカスタム投稿タイプを追加して、それに「地域」「間取り」のカスタム分類を組み合わせる例です。
このリストを、テーマのfunctions.phpテンプレートに追加すれば、実際に動作を見てみることができます。

function add_realestate_type() {
  $args = array(
    'label' => '物件',
    'labels' => array(
      'singular_name' => '物件',
      'add_new_item' => '新規物件を追加',
      'add_new' => '新規追加',
      'new_item' => '新規物件',
      'view_item' => '物件を表示',
      'not_found' => '物件は見つかりませんでした',
      'not_found_in_trash' => 'ゴミ箱に物件はありません。',
      'search_items' => '物件を検索',
    ),
    'public' => true,
    'show_ui' => true, 
    'query_var' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 5,
    'supports' => array('title','editor','author','thumbnail',
                                    'excerpt','comments','custom-fields')
  ); 
  register_post_type('realestate', $args);

  $args = array(
    'label' => '地域',
    'labels' => array(
      'name' => '地域',
      'singular_name' => '地域',
      'search_items' => '地域を検索',
      'popular_items' => 'よく使われている地域',
      'all_items' => 'すべての地域',
      'parent_item' => '親地域',
      'edit_item' => '地域の編集',
      'update_item' => '更新',
      'add_new_item' => '新規地域を追加',
      'new_item_name' => '新しい地域',
    ),
    'public' => true,
    'show_ui' => true,
    'hierarchical' => true,
  );
  register_taxonomy('area', 'realestate', $args);

  $args = array(
    'label' => '間取り',
    'labels' => array(
      'name' => '間取り',
      'singular_name' => '間取り',
      'search_items' => '間取りを検索',
      'popular_items' => 'よく使われている間取り',
      'all_items' => 'すべての間取り',
      'edit_item' => '間取りの編集',
      'update_item' => '更新',
      'add_new_item' => '新規間取りを追加',
      'new_item_name' => '新しい間取り',
      'choose_from_most_used' => 'よく使われている間取りから選択'
    ),
    'public' => true,
    'show_ui' => true,
    'hierarchical' => false,
    'show_tagcloud' => true
  );
  register_taxonomy('layout', 'realestate', $args);
}
add_action('init', 'add_realestate_type');

なお、register_taxonomy関数の書き方は、後日紹介します。

4.カスタム投稿タイプ/カスタム分類関係の記事の一覧

カスタム投稿タイプ/カスタム分類関係のその他の記事は、以下のリンクから参照できます。

WordPressで学ぶPHPとMySQLWordPressで学ぶPHPとMySQL」発売中です。
WordPressを通して、PHPとMySQLの基本をマスターするための本(PDF)です。
詳細は特設ページにて。