カスタム投稿タイプに親子関係を設定する


概要

Typesプラグイン では 異なる投稿タイプを 関連づけて 親子関係を 設定することが できます.例えば 不動産サイトの場合,「家・House」という 投稿タイプに 対して,子の関係になる 「部屋・Room」の 投稿タイプを 作成できます.さらに Viewsプラグインと 組み合わせることで,家を 表示したときに その家に 含まれる部屋を 表示し,反対に 部屋を 表示したときには,その部屋を 含む家を 簡単に 参照することが できます.※参考までに 公式サイトユーザーガイドでは,不動産サイトの他に 以下のような 例を 示しています.

  • レンタカーサイト車を 借りる人と 契約内容の 2つを リンクさせて,誰が どの車を 借りたか,反対に どの車が 誰に 貸し出されたかを 参照します.
  • 図書館サイトたくさんの本の中から,ある著者の本を 一覧表示したり,反対に 本の情報から その本の著者を 参照します.

 

動作のしくみを理解する

不動産のサイト

ここでは,公式サイトユーザーガイドの例に ならって,不動産サイトの例で 説明して いきます.まず 作成する カスタム投稿タイプ の親子関係を 考えます.

  • 「家」には「部屋」がある
  • 「部屋」は「家」に属している

このケースでは,「家」は 「部屋」の 親・投稿タイプである と言えます.

カスタム投稿タイプ に 親子関係を 設定している 場合,各部屋には 家を 参照するための IDが 格納され,各部屋と 家を 紐づけて くれます.ある家に属する 全ての部屋を 読み込む際には,ある家のIDと,各部屋に格納されている 家のIDとが 一致するものを 照会します.Typesプラグインは この紐付けのための情報を 特別な フィールドに 保存し 自動で 管理します.

各部屋には親ポストを特定するためのIDが保存される

親子関係が 設定された 投稿タイプ・家の 投稿画面を 見てみましょう.編集画面のFileds tableセクションを 見ると,この家に 含まれる部屋の情報が 一覧・編集できるように なっています.投稿タイプに 親子関係を 設定することに よって 親の投稿画面から 子の投稿情報を 編集することが できるように なります.

親子関係を設定するすると投稿画面にField tableセクションが出現する

Field tableセクションでは子・投稿タイプを直接追加・編集できる

上記画像のFields tableセクションの各部屋は,投稿タイプ:「家・House」に 直接含まれる カスタムフィールドではなく,投稿タイプ:「部屋・Room」のものです.2つの投稿タイプの 情報を 同時に 作成・編集することが できるので,子・投稿タイプの管理も 容易になります.

 

レンタカーのサイト

レンタカーのサイトの場合,少し複雑な 親子関係の 設定が 必要となります.ここでは 3つの カスタム投稿タイプを 用意しました.

  • 車両:全てのレンタル用車両を登録
  • 顧客:顧客情報を登録
  • レンタル情報:レンタルごとに契約情報を記録

3つのカスタム投稿タイプに 親子関係を 設定し,「誰が どの車を 何回 借りたか」や「どの車が 誰に 何回 借りられたか 」を 調べられるように します.まず 上記3つの 投稿タイプの 親子関係を 考えてみます.

先程の 不動産サイトの例では,家と部屋の関係は 固定されていますが,レンタカーの場合は どうでしょうか.同じ車両が 毎回同じ顧客に レンタルされるとは限らないので,親と子を紐づけるIDが 複数必要に なりますが,ひと組の 投稿タイプの 関連づけに おいて,照合用のIDは 各投稿データにつき 1つしか 持たせることが できないので,車両と 顧客を 直接 親子関係に 設定することは できません.

一組の親子関係で,子投稿タイプに格納できる照合用のIDは1つのみ

それでは,レンタル情報と 車両,レンタル方法と 顧客との関係は どうでしょうか.レンタル情報は レンタルするたびに 1つ作成されます.そこで 次のように 2つの親子関係を 設定して みます.

  • ひとつめの親子関係:親=車両,子=レンタル情報
  • ふたつめの親子関係:親=顧客,子=レンタル情報

二組の親子関係を設定したイメージ

このように 2つの 親子関係を 設定することで,「車両とレンタル情報」,「顧客とレンタル情報」それぞれの 関係において,不動産の「家と部屋」と同様に 関係が 固定されました.

実際に 車を レンタルしたときは,投稿タイプ:レンタル情報で,新しい「契約」を 追加します.投稿タイプ:レンタル情報には,カスタムフィールド上に 料金や 貸出日などの,レンタルごとに 特有の 追加情報を 持たせます.

上の画像の例で,「客:001」のレンタル履歴を 一覧するときは,投稿タイプ:レンタル情報に 格納されている データから「客:001」を キーにして 該当する レンタル情報を 抽出します(例では2つ).さらに 「客:001」の キーをもつ レンタル情報は,「投稿タイプ:車両」にも リンクしているので,どの車が 使われたのか(例では,2回とも車:001)も 見ることが できます.同じ仕組みで,各車両の レンタル履歴を 一覧することも できます.

実際の編集画面を見てみましょう

顧客情報編集画面の例

レンタル情報編集画面の例

車両情報編集画面の例

上の顧客情報編集画面の画像を みると,不動産サイトの 「家と部屋」 の例と 同じように,親・投稿タイプの 投稿編集画面のFields tableセクションに,子・投稿タイプである レンタル情報と,さらに レンタル情報に 紐づけられた 車両情報が 表示されて います.


 

カスタム投稿タイプ に親子関係を設定する方法

関連づける投稿タイプの選択

投稿タイプの 親子関係の 設定は 簡単です.カスタム投稿タイプの 作成・編集画面の 一番下に,Post Relationshipという セクションが あります.ここから,親・投稿タイプや 子・投稿タイプを 設定することが できます.

Editボタンをクリックすると,関連づける投稿タイプの選択欄が展開される

ApplyとSave Custom Post Typeをそれぞれクリックしていったん保存する

関連づける 投稿タイプを 指定したら いったん 編集中のカスタム投稿タイプを 保存して下さい.

編集画面に表示させる項目の選択

親子関係を 設定して,いったん カスタム投稿タイプを 保存した後,投稿編集画面のFields tabeセクションに 表示させたい データを 指定できるように なります.先程,関連づける投稿タイプを 選択したのと 同じ手順で,Post Relationshipセクションに 移動し,Editボタンを クリックして 展開します.先程チェックを 入れた 投稿タイプの横にあるEdit fieldsと書かれているリンクを クリックします.

先程指定した 投稿タイプの横の「Edit fields」をクリック

ポップアップ画面から,オプションを 選択する

Edit fieldsリンクを クリックすると,親・投稿画面のFields tableセクションに 表示させたい 項目を 選択できる オプション画面が 展開されます.3つの オプションは 以下のとおり.

  • All custom fields全ての カスタムフィールド
  • All fields,including the standard post fields子・投稿の 本文を含めた 全てのフィールド
  • Specific fields指定した フィールド.こちらを 選択すると,さらに フィールドの候補が 表示されます(上の画像参照).