2014年第2回WordBench京都勉強会に参加して


ずいぶん久しぶりな気がする。
2013年第6回WordBench京都勉強会以来か。
仕事が忙しいのと他のWordBench(大阪とか神戸)とかも覗きにいったり発表したりしてたからかな。

本日のプログラムはこちら
http://atnd.org/events/47294

・・・・

昨日、コワーキングスペースcoto(WordBench京都勉強会の会場)の扉までいったんです。
でも電気が消えているのをみて、、、勉強会が明日だということに気が付きました….
1月末にインフルエンザに感染して以降、風邪も併発してしまって最近疲れたのかなぁ。
日を間違えるとは….

おかげで、ヨドバシカメラによることができ本を買えたのでよかったですけどね。

気を取り直して本日。京都駅地下街のPontaで昼食しようと思ったら、改装のためファーストフードしか空いてない…がーん。ということでロッテリアでささっと食べてから向かいました……うん、ちゃんと勉強会ありました!

参加してみて

感想は冒頭に書くようにしてます。というか必要じゃない以上冒頭しかみないでしょ〜だから最初にかいておくの〜みたいなノリです。
今回は、最初の発表者が初心者(ご自身でそう発言されている)であり、疑問点をいろいろあげておられました。これってすごく貴重なことなのです。その疑問点、実際に使わない限り見落とすんですよね。こういうところで疑問として出てきてくれれば、細部に関しての知識を得る(少なくても後から調べて理解すればいい)貴重な機会になるんですよね。だから定期的にやってほしいなぁと思います。

という前置きはわきに置いておくとして、今回は下記のことを学びました。

  • カスタム投稿タイプでの親子関係(実際は相互利用)を利用した入力(プラグイン: Typesなら可能)
    1つのカスタム投稿タイプで、他のカスタム投稿タイプのカスタムフィールドを入力/編集できるってこと
    ※ついでに「Rewrite」設定についてはまりました(座談会終了後まで)
    ※ですが最終的に、Custom Post Type UIの開発者にコンタクトをとって「リライト」が動作しない不具合の報告(対処するという返事あり)が出来たのはよかったですね。
  • Typesというプラグインで何ができるのか(細部まで認識でき、超便利だということが分かった)

関連情報

はじめに

冒頭、@as_chachamaruさんより、WordCamp Kansai 2014の紹介がありました〜。
みんな、2014年6月7日〜8日は予定をあけときましょう〜。

以下、発表者の発言メモです(私の脳内変換のバイアスがかかっています)。「※」は私のツッコミやメモです。

セッション

<セッション1> – プラグイン:Custom Post Type UI について(@flagment4)

※初心者でデザイナーな方が、どういう点でつまづいたのかを発表されました。

function.php への写経を「かつて」やってみたが…

できない…. と敗北したのだが、プラグイン(Custom Post Type UI)の存在を知って再チャレンジ。

Custom Post Type UIを導入してみて

メニューが英語なのに「うぅ」となりつつ、こわごわと触る。
テストとしてカスタム投稿として「日記」を追加。するとそのメニューを見ると「Add 日記」が出てくる。
普段は「新規投稿」だったりするので斬新…

ここまでは簡単に出来て、感動した…

もうすこし触ってみた

Manage Post Types(サブメニュー)に登録した「日記」について編集をクリックすると変更できるみたい。
ん?「Advanced….」がある…とりあえずやってみた

Advanced Label Options

「Add 日記」を変更できたり、ちょっとした変更が可能になった。これは便利だ。

Advanced Options

いろいろと設定が変更出来る

カスタム分類作成のほうをためしてみた

先ほどつくった日記に追加。
すると日記のサブメニューに「種類」が増えた。

疑問

以下の疑問については次の発表者の内容を踏まえて、座談会でやってみましょうということになった。

どうやってサイトに表示させるのか

サイトには表示されたけど、この記事がどこにあるか分からない
※座談会項目参照(末尾)

カスタムリライトスラッグってなに?

※座談会項目参照(末尾)

クエリーバージョンってなに?

※座談会項目参照(末尾)

リライトの意味は?

※座談会項目参照(末尾)

<セッション2> – プラグイン:Types について(@as_chachamaru)

公式マニュアルが充実しているので是非一読してみてください。
http://wp-types.com/documentation/
でも英語…だから読まれない場合があるかも
※エンジニア

サンプルサイトの紹介

複数の物件を管理したいとした場合、
種別:戸建、マンション、収益物件
部屋:洋室、和室…
部屋詳細:詳細ページがあるかどうか

などなどの分類が必要となる。

カスタム投稿タイプを使う理由

投稿のカテゴリーでも出来なくはないが、いろいろな情報が混ざってしまうために使いづらい。
従って、投稿と同じ機能をもつ独立したものが欲しい。それがカスタム投稿タイプと呼ばれる。
投稿はさらにカスタムフィールド(表示オプションで表示させるようにすれば投稿に出てくる)でも使えるが、毎回追加するのは面倒である。最初から入力が必要な入力項目(カスタムフィールド)があったほうが便利ではないか。これもカスタム投稿タイプを使えば、それに特化した入力項目を設定できるのでメリットがある。

また分類(カテゴリーやタグ)について、カスタム投稿タイプ専用の分類が可能である。これをカスタム分類と呼ばれている。
※カテゴリーやタグなど分類に関するWordPress上の用語として、「タクソノミー」が使われる。

WordPressが標準で使えるようにしているものに追加するので「カスタム」と名前がつく。
(カスタム)投稿タイプ、(カスタム)分類<カスタムタクソノミーと呼ばれる>、(カスタム)フィールドなど。

※作成したそれぞれの分類に写真情報(部屋なら、部屋の写真とか)をつけることができるのか

出来る事

カスタム投稿タイプの追加以外に、カスタムフィールドの追加、ユーザーの登録画面のカスタマイズなどもできる。
さらにインポートとエクスポートがあるので、ローカルで作成した設定を本番に移行するときに便利。
カスタム投稿タイプごとに権限を設定できる(有償オプション)

さらにとっても便利なのが、作成したカスタム投稿タイプの表示のための「ショートコード」が豊富に取り揃えられていることにある。

ライブコーディング

Typesを導入した状態からの説明(インストール方法も同時に説明された)。

menu_positionなど設定については、codexマニュアルを読むことになるが、できれば英語版がいい。
日本語版は、英語版の翻訳であり最新情報でない場合が往々にしてあるから。

登録時の注意

英語用に単数と複数形を配慮されて登録することになるが、日本語で名前を登録するときにはなにかごまかさなければならない。
使われるのは、ラベルの表示。そういう場合には、ラベル設定の方で調整が必要か。%sが置き換わる部分になるので。
※というか複数形対応はオプションにすべきだよなぁ。設定なければ、単数のものを使えば自動的に使うように考えたらいいのにね(私はこのプラグイン使っていないのですが、一度作者にそのあたりの提案をしてみるのもよいかもしれませんね)

必須項目のスラグについては、利用しているWordPress上でユニークなものを設定せねばならない。
いわゆる識別子になるため、そのため接頭語を工夫するなど考えなければならない。
pageは固定ページ、postは投稿で使われている。
※あとでカスタム投稿タイプデータを参照するときに使われる。

メニューアイコン

すでにWordPressで用意(http://melchoyce.github.io/dashicons/)されている。
そのサイトをみて、メニュー名を入れれば良い

グループ

投稿画面のそれぞれのまとまりと思ってもらえばいい

データ依存型ディプレイフィルタ

特定の状況のみ表示させることができるフィルタ
住所が表示されたときのみ表示とか。

Postつながり(カスタム投稿タイプに親子関係を結べる)

関係性をもたせると、一度下書き等保存すると、関連させたグループが追加で入力できるようになる。
こういうことが出来ると、カスタム投稿タイプを複数つくって、でも表示は1つだけに設定し、
すべて1つの(親)から入力させて管理させることができる。

┗ 子供1(URL非表示)
のようなイメージも可能。
もっとも相互やりとりできるので、親子のイメージで使うだけでなく、双方向で使うことも出来る。

※これかなり便利そう

表示

標準ではカスタムフィールド部分は出てこない….
http://wp-types.com/documentation/functions/
をみながらショートコードを作成して、これを使えば良い。

single-カスタム投稿タイプ名.php を作成(single.phpのコピー)…

投稿ページに対して、カスタム投稿タイプ名専用のテンプレート階層を作成することができる。
そうしなければ、このif文でカスタム投稿タイプごとに設定変更するようなコードをいれこんでいかないといけない。

で実際の表示は、Types Field APIにて「More>>」の部分をクリックするとサンプルが出てくるのでこれをコピー&ペーストすればよい。
ここにはPHP(テンプレートファイルに入力)やショートコード用のサンプルが詳しく書いている

関連リンクの表示

これもマニュアルがある。
http://wp-types.com/documentation/user-guides/many-to-many-post-relationship/
の中の末尾にある「Displaying Many-to-Many Relationship Using Types PHP API」のコードについて、「カスタム投稿名」を変更するだけですむ。

※つまりは

$child_posts = types_child_posts('appearance');

のappearanceを変更するだけかな。

分類の入力

分類を登録しても、標準設定は自由入力となる。
設定でTypesの分類設定でフラットから「階層」に変更することで、選択式となる。

<カスタム投稿タイプ座談会>

質問タイム

Typesについて

翻訳は?

WPML, Qなんちゃら….
WPMLとTypesを作っている会社が一緒なので相性はいい(対応している)。

Custom Post Type UI

どうやってサイトに表示させるのか

コードを書かないといけない….get_postsとかでテンプレートに

カスタムリライトスラッグってなに?

/カスタム投稿タイプ名/投稿名/
などで決め打ちされているが(パーマリンク設定で変わるけれど)、これを
これを指定することで、
/◯◯◯/投稿名/
のような◯◯◯を変更できる。

これは、カスタム投稿タイプで登録したスラッグ名が重複しても大丈夫にするためじゃないか

※たぶん◯◯◯を変えたいよ〜ってときの話?

※気になるので調べてみました。

ソースには

$rewrite_slug = ( $cpt_post_type["rewrite_slug"] ) ? $cpt_post_type["rewrite_slug"] : $cpt_post_type["name"];

とある。これだな。
つまり

通常:http://hogehoge/カスタム投稿タイプ名/☓☓
False:http://hogehoge//カスタムリライトスラッグ名/☓☓
とまぁできるってこと。

Show in menuとは?

Falseにすると、管理画面のサイドメニューから消す事ができる。

クエリーバージョンってなに?

よくわかんない(筆者が聞き取れなかった)。
※後日ちょっと調べたところ、勉強会でも参加者から突っ込みがあった「QUERY_VAR」の事だろうと推測。
こういうのって「日本語訳するな」と思いますね(意味が分からなくなるから)。

リライトの意味は?

もしかして直リンクを禁止する(False)ということかなど推測が飛び交った。
もう少し調べないとだめですねぇ…でも気になるので座談会終了後の懇談会みたいな場でCustom Post Type UI のソースコードをチェックしてみました。1ファイルしかなかったので(そんな構造でいいのか!?)、チェックするのは難しくなかったですね。
RewriteのTrue/Falseの設定は

$cpt_tax_rewrite = $cpt_options[$editTax]["rewrite"];

で取得しています。
しかしながら登録の段階(register_post_type)

            register_post_type( $cpt_post_type["name"], array(    'label' => __($cpt_label),
                'public' => get_disp_boolean($cpt_post_type["public"]),
                'singular_label' => $cpt_post_type["singular_label"],
                'show_ui' => get_disp_boolean($cpt_post_type["show_ui"]),
                'has_archive' => $cpt_has_archive,
                'show_in_menu' => $cpt_show_in_menu,
                'capability_type' => $cpt_post_type["capability_type"],
                'map_meta_cap' => true,
                'hierarchical' => get_disp_boolean($cpt_post_type["hierarchical"]),
                'exclude_from_search' => $cpt_exclude_from_search,
                'rewrite' => array( 'slug' => $cpt_rewrite_slug, 'with_front' => $cpt_rewrite_withfront ),
                'query_var' => get_disp_boolean($cpt_post_type["query_var"]),
                'description' => esc_html($cpt_post_type["description"]),
                'menu_position' => $cpt_menu_position,
                'menu_icon' => $cpt_menu_icon,
                'supports' => $cpt_supports,
                'taxonomies' => $cpt_taxonomies,
                'labels' => $cpt_labels
            ) );

のrewrite項目では、これが活かされてません(というかrewrite_slug、つまり「カスタムリライトスラッグ」の設定があれば、その設定を適応しかしてない)。意図した動きにさせるなら、「リライト」の値がTrue(デフォルト)なら、上記の登録時設定(rewrite項目)を、Falseなら「false」の値を入れなければなりませんね。
そしてもしそうなら、「リライト」の設定が「False」ならば、パーマネント設定が「無効」となり、つまりは
http://○○/カスタム投稿タイプ名/投稿名/ などでのアクセスが出来なくなるってことを意味します。
get_posts等のプログラムからカスタム投稿タイプデータを取得して表示しないかぎり、データが取れないってことですね。

一応
http://wordpress.org/support/topic/whats-rewrite-setting-in-advanced-options?replies=1#post-5210769
にて質問しておきました…早速翌日に作者から返事きました!!!
設定忘れていたみたいです (^^; 次のバージョンで対応するという返事でした。
こうやって問題が解決していくと気持ちがいいですね。これもWordBenchという機会があっての賜です!

でも何に使うかは書かれていなかったので、このプラグインのバージョン履歴をみました

0.4.1の時にRewriteとQUERY_VARは実装されたと書かれていたので、SVNサイト(http://plugins.svn.wordpress.org/custom-post-type-ui/tags/0.4.1.0/)から0.4.1のソースを引っ張ってきてチェック。

            register_post_type( $cpt_post_type[0], array(   'label' => __($cpt_label),
                'public' => disp_boolean($cpt_post_type[2]),
                'show_ui' => disp_boolean($cpt_post_type[3]),
                '_edit_link' => $cpt_post_type[4],
                'capability_type' => $cpt_post_type[5],
                'hierarchical' => $cpt_post_type[6],
                'rewrite' => disp_boolean($cpt_post_type[7]),
                'query_var' => disp_boolean($cpt_post_type[8]),
                'supports' => $cpt_post_type[9]
            ) );

となってました。具体的には、register_post_typeのrewrite設定に対してAdvanced optionsのリライトの「true/false」のいずれかの値を入れているだけでした。ですのでこの段階では動作していたんですよね。

でどこからミスっていたのかもついでに調べてみました……0.5.0からダメじゃん…(0.4.1の次のバージョン)。

2014年2月9日 木谷
2014年2月10日 加筆修正

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中