WordPressでカスタム投稿タイプをつくるには以下の register_post_type() を使用します。
はい、でもやったことがある方はご存知の通りパラメータが多くてとてもめんどくさいです。
でも WP-CLI ユーザーの皆さんは、コマンド一発で終わります。
$ wp scaffold post-type <slug>
たとえば information というカスタム投稿タイプをつくりたいなら以下のような感じです。
$ wp scaffold post-type information
このコマンドを実行するとカスタム投稿タイプを定義するためのPHPコードが出力されますので、それをファイルとして保存して、プラグインなりテーマなりからrequire
したらそれで完了です。
超簡単にやるなら以下のように mu-plugins の中に直接書き込めば一撃で完了します。
$ wp scaffold post-type information > wp-content/mu-plugins/info-cpt.php
意外と知らない方が多いのですが mu-plugins というのは、強制的に有効化されるプラグイン用のディレクトリで、wp-content/mu-plugins
というディレクトリにあります。
ここにPHPのファイルを置くとなんでもかんでも強制的にWordPressによって require
されますので、WP-CLIで生成したソースを直接このディレクトリにリダイレクトすればそれだけでカスタム投稿タイプが認識されるわけです。
REST APIに対応させる
このカスタム投稿タイプを使用して REST API を作ってみましょう。
カスタム投稿タイプでREST APIを有効化するのは簡単で、先ほど作ったファイルの中にある show_in_rest の値を true にするだけです。
'show_in_rest' => true,
WP-CLI コマンドで作った場合にはデフォルトで true なので、REST APIいらないよって言いう場合には false にする必要があります。
APIだけを使いたい
このカスタム投稿タイプをREST APIのエンドポイントとしてだけ使いたいというケースもあると思います。
スマホアプリとか外部サイトと連携する場合ですね。
その場合は、public
の値を false
にしてください。
そうするとサイト側では表示されなくなります。
これをしないとテーマで何もしなくても以下のようなURLで表示されてしまうのでご注意を。
http://example.com/?information=hello
JetPack対策
さて、これでいけたと思ったら大間違いです。
REST APIのバックエンドとしてカスタム投稿タイプを使用したい場合、カスタムフィールドとかでメタデータ(商品データであれば値段とか)を保存できるようにしたりとかいろいろ投稿画面をカスタマイズしますよね。
その時に、かなり話をめんどくさくしてくれやがるのがJetPackです。
このプラグインは、WordPressの裏側でいろいろ暗躍してくれやがりますので、public
が false
になっているとしても、WordPress.comのCalypsoでこのカスタム投稿タイプに投稿できちゃったり、既存の記事を編集できたりしてしまうケースがあります。
https://wordpress.com/types/<custom-post-type>/
この場合カスタムフィールドをあてにしたコンテンツだとぶっ壊れる可能性がありますので Calypso では非表示にしましょう。
といわけで以下、有料会員の皆様向けにJetPack対策を紹介します。JetPack disりも含めてお楽しみください。