結論から言うとできません。参照
(2019-02)時点のこのサイトでは、 Post コンテンツタイプで親となる Note コンテンツタイプの投稿を必ず1つ参照しなければならないという形で管理しています。そしてあまり無意味な URL にしてはいけなかったので、 Post コンテンツタイプを表示するページ(?note=xxx&post=yyy
)では、
xxx
はnote
というフィールド名で参照する Note コンテンツタイプのslug
フィールド値yyy
は Post コンテンツタイプのtitle
フィールド値
のような形にしました。ですのでコンテンツプレビュー API でもその2つの値を取得する必要があります。
確認したこと
コンテンツプレビューの URL ではentry
で投稿オブジェクトが格納されていてこれを JavaScript のオブジェクトアクセスのように辿って、使いたい値を使うという感じです。またそれは{}
で囲んで使います。
なので僕は以下のような Post コンテンツタイプのプレビュー URL に以下のように設定しました。(domain.com
は適当です)
http://domain.com/note/post?note={entry.fields.note.fields.slug}&post={entry.fields.title}
しかし、これはうまく動きません。entry.fields.note.fields.slug
の箇所がundefined
となってしまいます。
次はこんな URL を試しました。なぜsys.id
が分かったかというと確かドキュメントに書かれてたからじゃなかったからかなと思います。(忘れた;)
http://domain.com/note/post?note={entry.fields.note.sys.id}&post={entry.fields.title}
これはちゃんと何かしらの値が埋められた URL が発行されました。つまり参照のメタ情報(sys)は扱えるが、フィールド値は使うことができない仕様のようでした。
一応このことについて問い合わせてみたいのがトップの参照リンクです。
The slug of content type Note can be obtained by passing entry ID of content type Post, however, unfortunately it is not possible to be used in content preview directly.
なんとかコンテンツプレビュー API に対応する
コンテンツプレビュー API で渡ってくる値用のクエリを定義して、「そのクエリが含まれている URL ならコンテンツプレビューで表示する」というようにするしか無いかなと思います。つまり、コンテンツプレビューように、
http://domain.com/note/post?__noteId={entry.fields.note.sys.id}&__postId={entry.sys.id}
みたいな。一応プライベートなものですよみたいに_
を頭に付けるなどでやるしかないかなと思います。