サイトアイコン Capital P

REST API対応のWordPressのカスタム投稿タイプを1分でつくる

WordPressでカスタム投稿タイプをつくるには以下の register_post_type() を使用します。

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の裏側でいろいろ暗躍してくれやがりますので、publicfalse になっているとしても、WordPress.comのCalypsoでこのカスタム投稿タイプに投稿できちゃったり、既存の記事を編集できたりしてしまうケースがあります。

https://wordpress.com/types/<custom-post-type>/

この場合カスタムフィールドをあてにしたコンテンツだとぶっ壊れる可能性がありますので Calypso では非表示にしましょう。

といわけで以下、有料会員の皆様向けにJetPack対策を紹介します。JetPack disりも含めてお楽しみください。

この投稿の続きを読むためには、Capital Pでログインする必要があります。

続きを読む
モバイルバージョンを終了