[wordpress] カスタム投稿タイプを使うにはどうすればいいか

前に、カスタム投稿タイプをどういうときに使うのか、という話をしました。ここでは、カスタム投稿タイプを使う場合、どういうことをしないといけないのか、について書いていきたいと思います。なお、wordpressのバージョンは、3.9を想定しています。

カスタム投稿タイプの追加

カスタム投稿タイプを追加するには、下のプログラムをfunctions.phpに追加すれば最低限のことはできます。

add_action( 'init', 'my_register_post_type' );
function my_register_post_type() {
  $args = array(
    'public' => true
    , 'label'  => '本'
  );
  register_post_type( 'book', $args );
}

上の「my_register_post_type」というのは、自分で好きな名前に変更します。実際にカスタム投稿タイプの設定をしているのは、register_post_typeのところです。1つ目の引数が投稿タイプの名前で、2つ目がその投稿タイプのさまざまな設定ですね。上の例では、labelを「本」にしていますが、これによって管理画面の左側メニューに「本」という名前の投稿タイプが出来上がります。

20140430

ただ、これだけでは作った意味があまりありません。普通は、この新しい投稿タイプにいろんな設定をしていきます。全部書くのは大変なので、主なものだけ書いていきたいと思います。

まずは、labelですね。これは管理画面のメニューに表示されるものです。何も指定しなければ、register_post_typeの1つ目の引数と同じになります。labelを日本語で設定するとわかりやすくなりますね。

labelと似ていますが、labelsというのもあります。投稿タイプに表示されるラベルをまとめたもので、上で指定したlabelよりももっと細かく指定できます。例えば、新規追加するときに表示するラベルや削除した時に表示するラベルなどですね。上で指定したlabelを上書きすることもできます。個人的には、labelを指定すればlabelsを指定する必要はないかなと思います。

publicは、管理画面内に作成した投稿タイプを表示するか、検索結果にこの投稿タイプの記事を含めるか、などいくつかの表示項目を設定するためのものです。普通にカスタム投稿タイプを使うなら、trueにしておきます。

supportsでは、管理画面の項目の表示を設定できます。デフォルトでは、タイトルとエディタだけになっていますが、抜粋やカスタムフィールドなどを追加で表示することができます。リビジョンを保存するかどうか、なども設定できます。

また、hierarchicalhas_archiveという設定項目もあります。hierarchicalをtrueにすることにより、ページに親子関係を設定することができるようになります。page投稿タイプに似たものにできるということですね。has_archiveをtrueにすると、アーカイブが作成できるようになります(アーカイブページは別途つくる必要があります)。

menu_positionを使えば、管理項目のどの位置にカスタム投稿タイプを表示するかを設定できます。デフォルトでは、カスタム投稿タイプはコメントの下に表示されます。これを、一番上とか、投稿の下とか、一番下とか好きなところに表示させることができます。

とりあえず、labelでメニュー表示名を設定し、publicをtrueにして、今までに挙げたような項目を設定すれば、形にはなると思います。より細かな設定方法は、オフィシャルページを見てみましょう。部分的に英語が残ってて、さらに英語ページとは少し違うところもありますが、あまり問題なくできるんじゃないかと思います。

関数リファレンス/register post type - WordPress Codex 日本語版

次のステップは?

カスタム投稿タイプを追加するのはすぐにできます。しかし、ただ作るだけではあまり意味はありません。新しいフィールド、カスタムフィールドを追加して初めてカスタム投稿タイプを作る意味が出てくるのだと思います。また、カスタム投稿タイプでは、タグやカテゴリーを使うことができません。代わりにカスタムタクソノミーというものを使います。ただ、これらはまた別途設定する必要があります。

さらに、カスタム投稿タイプを表示するためのテンプレートを作成する必要が出てくるかもしれません。特に指定しなければ、「archive.php」や「single.php」が使用されますが、デザインを変えたい等の場合は、「archive-カスタム投稿タイプ名.php」や「single-カスタム投稿タイプ名.php」といったテンプレートを作る必要があります。

前の記事:
[wordpress] カスタム投稿タイプって、どういうときに使うんだろう
次の記事:
[wordpress] カスタムタクソノミーを使うにはどうすればいいか