WordPress 3.0のカスタム投稿タイプ機能(その2)

先日の記事で、カスタム投稿タイプの例を紹介しました。
今日は、カスタム投稿タイプを登録する「register_post_type」関数の使い方を解説します。

1.register_post_type関数の概要

register_post_type関数は、WordPressにカスタム投稿タイプを登録する働きをします。
基本的な書き方は以下の通りです。

register_post_type(カスタム投稿タイプ名, パラメータの配列)

「カスタム投稿タイプ名」は、登録したいカスタム投稿タイプに合わせて、その名前を英単語で指定します。
例えば、物件を表すカスタム投稿タイプを追加するなら、カスタム投稿タイプ名は「realestate」等にすると良いでしょう。
また、「パラメータの配列」には、register_post_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);

2.パラメータの配列の指定方法

前述したように、register_post_type関数の2つ目のパラメータには、各種のパラメータを連想配列に入れて渡します。
その連想配列の要素名と、要素ごとの設定の内容は、以下の通りです。

2-1.label

カスタム投稿タイプの名前を指定します。
ここで指定した名前が、ウィンドウ左端のメニューに表示されます。

例えば、物件を表すカスタム投稿タイプを追加するなら、label要素の値は「物件」にすれば良いでしょう。

2-2.labels

カスタム投稿タイプ関連の管理画面に表示するラベルを指定します。
管理画面上での位置と、そこに表示するラベルの対応は、連想配列の形で表します。
この連想配列の要素名と、要素ごと設定の内容は、以下の通りです。

要素名設定内容
nameカスタム投稿タイプ名の複数形
singular_nameカスタム投稿タイプ名の単数形
add_new_itemカスタム投稿の新規作成ページの左上に表示されるタイトル
add_newメニューの「新規」の位置に表示するラベル
new_itemカスタム投稿一覧ページの右上の方にある新規作成ボタンのラベル
edit_itemカスタム投稿編集ページの左上に表示されるタイトル
view_itemカスタム投稿編集ページの「○○を表示」ボタンのラベル
search_itemsカスタム投稿一覧ページの検索ボタンのラベル
not_foundカスタム投稿を追加していない状態で、カスタム投稿一覧ページを開いたときに表示するメッセージ
not_found_in_trashカスタム投稿をゴミ箱に入れていない状態で、カスタム投稿のゴミ箱ページを開いたときに表示するメッセージ

各設定と、実際の管理画面上での対応は、以下の各画面のようになっています。

カスタム投稿の一覧のページ

カスタム投稿の新規作成のページ

カスタム投稿の編集のページ

2-3.description

カスタム投稿タイプの概要文を指定します。

2-4.public

WordPressのCodexのページでは、「このカスタム投稿タイプを管理画面に表示するかどうかを指定する」というような記述があります。
ただ、こちらで試した限りでは、管理画面に表示するかどうかは、後述する「show_ui」で決まるようです。

2-5.publicly_queryable

この値をtrueにすると、メインページのアドレスの最後に「?post_type=カスタム投稿タイプ名」を付けると、そのカスタム投稿タイプの最新記事一覧を出力できるようになります。
なお、この値の指定を省略した場合、publicに指定した値と同じ設定になります。

2-6.exclude_from_search

検索からカスタム投稿タイプを除外したい場合は、この値をtrueに設定します。
なお、この値の指定を省略した場合、publicに指定した値の逆の設定になります。

2-7.show_ui

管理画面にカスタム投稿タイプの作成や一覧のページを表示する場合は、この値をtrueに設定します。
一方、この値をfalseに設定すると、管理画面上ではこのカスタム投稿タイプを操作することができません。
なお、この値の指定を省略した場合、publicに指定した値と同じ設定になります。

2-8.capability_type

カスタム投稿タイプに割り当てる権限のタイプを指定します。
例えば、「capability_type => 'post'」とすれば、投稿を編集できるユーザーは、そのカスタム投稿タイプも編集できるようになります。
また、独自の権限を指定して、その権限があるユーザーにだけ、カスタム投稿タイプの操作を許可するようにすることもできます。
この詳細は、後日に別途解説する予定です。

2-9.hierarchical

この値をtrueに設定すると、固定ページのように、カスタム投稿に親子関係を持たせることができます。
一方、この値をfalseにすると、投稿のように、親子関係を持たせないようになります。

2-10.supports

カスタム投稿タイプの編集/新規作成のページに表示する入力欄を、文字列の配列で指定します。
指定する文字列と、表示される入力欄の対応は、以下の通りです。

文字列入力欄
titleタイトル
editor本文
author作成者
thumbnailアイキャッチ画像
excerpt抜粋
commentsコメント一覧
trackbacksトラックバック送信
custom-fieldsカスタムフィールド
revisionsリビジョン
page-attributes属性(hierarchicalをtrueに設定している場合のみ指定)

例えば、「supports => array('title', 'editor')」とすると、カスタム投稿の編集/新規作成のページには、タイトルと本文の入力欄だけが表示されます。

2-11.register_meta_box_cb

カスタムフィールドの入力欄を設定するための関数名を指定します。
この件については、後日に別途解説する予定です。

2-12.taxonomies

カスタム投稿を分類するためのカスタム分類の情報を指定します。
この件については、後日に別途解説する予定です。

2-13.menu_position

カスタム投稿の一覧/追加のメニューを追加する位置を指定します。
「menu_position => 5」とすると、「投稿」の下にメニューが追加されます。
「menu_position => 10」とすると、「メディア」の下にメニューが追加されます。
以後、5刻みで値を増やすことで、メニューを追加する位置を1つずつ下に下げることができます。

2-14.menu_icon

カスタム投稿のメニューに表示するアイコンのURLを指定します。
この指定がない場合は、投稿のアイコン(ピンの絵柄)がそのまま使われます。

2-15.rewrite

「rewrite => true」に設定し、かつWordPressのパーマリンク設定をデフォルト以外に設定している場合、「http://ブログのアドレス/カスタム投稿タイプ名/個々のカスタム投稿のスラッグ/」のアドレスで、そのカスタム投稿のページを開くことができるようになります。
また、この値を「rewrite => array('slug' => 'スラッグ')」のようにすると、「http://ブログのアドレス/スラッグ/個々のカスタム投稿のスラッグ/」のアドレスで、そのカスタム投稿のページを開くことができるようになります。

なお、rewriteを行う場合、register_post_type関数を実行した後に「$wp_query->flush_rules();」を実行して、rewriteのルールを設定しなおす必要があるようです。

2-16.query_var

「query_var => true」に設定すると、「http://ブログのアドレス/?カスタム投稿タイプ名=個々のカスタム投稿のスラッグ」のアドレスで、そのカスタム投稿のページを開くことができるようになります。
一方、「query_var => false」に設定すると、「http://ブログのアドレス/?post_type=カスタム投稿タイプ名&name=個々のカスタム投稿のスラッグ」のアドレスで、そのカスタム投稿のページを開くことができるようになります。

2-17.can_export

「can_export => true」とすると、カスタム投稿をエクスポートすることができるようになります。
一方、「can_export => false」とすると、カスタム投稿をエクスポートすることができなくなります。

2-18.show_in_nav_menus

「show_in_nav_menus => true」とすると、カスタムメニューにカスタム投稿を追加することができるようになります。
一方、「show_in_nav_menus => false」とすると、カスタムメニューにカスタム投稿を追加することができなくなります。

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

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

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