WordBench長野の第1回勉強会に参加してきました。 #wbNagano

11月24日に塩尻インキュベーションプラザで行われた、WordBench長野の第1回勉強会で、「カスタム投稿タイプ&カスタムタクソノミー」というテーマで発表をさせていただきました。

[slideshare id=15335944&doc=wbnagano20121124-121125054736-phpapp01]

人と話すこと自体嫌いではないのですが、何せあがり症で人見知りのコミュ障なので、まぁ楽しいながらも大変な経験でした。
発表の最中でこんなツイートが画面にも映ったり。

https://twitter.com/CrudeMusic/status/272228366399205377
そんな苦労もありながらも「カスタム投稿・タクソノミー便利そう!使ってみたい!」みたいなレスポンスも結構いただけたのでそれなりに登壇者としての務めを果たすことができたのではないかなと。

誘っていただいた、みやざわさん@dxd5001を始め、運営して下さった皆様、発表を見てくれた方やお話させてもらった参加者の方々本当にありがとうございました。

また、僕が燃え尽きていたせいで声をかけることができなかった方も居たので、TwitterでもFacebookでもリアルでも絡んでいただけたら嬉しいです。発表でも言いましたが、お金以外の寄付も歓迎です。

ビールも好きですけど、美味しい日本酒はもっと好きです。でもおいしいごはんもやっぱり大好きです。

そんなわけで、スライドの補足というか、スペースの都合で省略した、register_post_typeregister_taxonomyの実装例をつらつらと。Custom Post Type UIより、細かい設定ができますので、慣れてきたら、コードをfunctions.phpに書くほうがベターかと思います。テキストボックスに一つ一つ書いていくより楽だし、使いまわしも利くので仕様が固まっている場合はこっちのほうがいいかなーと思います。どうせ書くことなんて変わらないですし。

[php]
add_action(‘init’,’add_ctp’);
function add_ctp() {
register_post_type(
‘goods’, //カスタム投稿名
array(
‘label’ => ‘商品’,
‘description’ => ”,
‘public’ => true, //表示したり、URLでアクセスできたりするかどうか
‘hierarchical’ => false, //固定ページみたいに階層にするかどうか
‘rewrite’ => array( ‘slug’ => ” ),
‘query_var’ => true,
‘has_archive’ => true, //アーカイブページを作成する
‘menu_position’ => 5, //メニューの位置。5は“投稿”の下。
‘supports’ => array( ‘title’, ‘custom-fields’ ),どんな機能を使えるようにするか。
‘labels’ => array (
‘name’ => ‘商品’, //表示名
‘all_items’ =>’商品一覧’, //すべての投稿のラベル
‘add_new’ => ‘新規追加’,
‘add_new_item’ => ‘新しい商品を追加’,
‘edit’ => ‘編集’,
‘edit_item’ => ‘商品を編集’,
‘new_item’ => ‘新しい商品’,
‘view’ => ‘商品を表示’,
‘view_item’ => ‘商品を表示’,
‘search_items’ => ‘商品を検索’,
‘not_found’ => ‘商品が見つかりませんでした。’,
‘not_found_in_trash’ => ‘商品がゴミ箱内に見つかりませんでした。’,
)
)
);

register_taxonomy(
‘goodscategory’, //タクソノミー名
‘goods’, //対応する投稿タイプ
array(
‘hierarchical’ => true, //階層(カテゴリ)にするか非階層(タグ)にするか
‘label’ => ‘商品カテゴリー’,
‘query_var’ => true,
‘rewrite’ => true,
‘labels’ => array(
‘name’ => ‘商品カテゴリー’,
‘singular_name’ => ‘商品カテゴリー’,
‘search_items’ => ‘商品カテゴリーを検索’,
‘all_items’ => ‘商品カテゴリー’,
‘edit_item’ => ‘商品カテゴリーを編集’,
‘update_item’ => ‘商品カテゴリーを更新’,
‘add_new_item’ => ‘商品カテゴリーを追加’,
‘new_item_name’ => ‘新しい商品カテゴリー’,
)
)
);

register_taxonomy(
‘campaign’,
‘goods’,
array(
‘hierarchical’ => true,
‘label’ => ‘キャンペーン’,
‘query_var’ => true,
‘rewrite’ => true,
‘labels’ => array(
‘name’ => ‘キャンペーン’,
‘singular_name’ => ‘キャンペーン’,
‘search_items’ => ‘キャンペーンを検索’,
‘all_items’ => ‘キャンペーン’,
‘edit_item’ => ‘キャンペーンを編集’,
‘update_item’ => ‘キャンペーンを更新’,
‘add_new_item’ => ‘キャンペーンを追加’,
‘new_item_name’ => ‘新しいキャンペーン’,
)
)
);

}
[/php]

カスタム投稿タイプの追加だったら、便利なクラスもあるので、そちらを活用してもよいと思います。
カスタム投稿タイプを簡単に利用できるようにする便利コード | モンキーレンチ

あとは、順序をサポートしたカスタム投稿タイプのデフォルト表示順を変更してみる | Simple Colorsとかを使うと、商品一覧とか、日付順で管理をしたくないものとかでは有効です。

また、register_taxonomyの’hierarchical’は、trueにしておいたほうが管理画面上では何かと使い勝手が良いです。

こんな感じで、実はかなーり奥が深い機能です。’public’ => false を活用してプラグインのデータを保存したり(Advanced Custom Fields,Contact Form 7なんかで使われている手法です。)、ページを作成せずに更新可能なエリアを作ったりなど、応用範囲は幅広いです。

カスタム投稿タイプとカスタムフィールド、WP_Queryを組み合わせるとほんとに無敵です。DrupalのViews+CCKと似たような感じですかね。そっちよりは、機能的には少ないですが、実装はシンプルです。Viewsは本当に何でも持ってこれますし、記事の抽出条件もかなり細かく設定できますけど、その分パラメーターも多いので、場合と好みで使い分ければいいんじゃないかと思います。

カスタム投稿タイプ・カスタムタクソノミーで素敵なWordPressライフをお楽しみください。