今回の記事では、WordPress REST APIとは何かといったものから、基本的な情報や使い方を紹介します。
目次
WordPress REST APIとは
WordPress REST APIは、WordPressの管理画面にログインしたりブラウザで操作することなく、データやリソースにアクセスできるようになるWordPressに組み込まれた機能です。
REST APIを使えば、PHP以外の言語でも扱いやすくなるほか、投稿以外にもメタデータやユーザー情報などのデータを操作できます。
また、WordPress REST APIはHTTPプロトコルとJSON(JavaScript Object Notation)を使用してデータのやりとりを行います。
REST APIでデータベースの操作もできる
REST APIを使うことで、外部から投稿などのデータを作成や更新、取得、削除といったデータベースの操作ができます。
カスタム投稿タイプなどのカスタム関係は、デフォルトのREST APIではデータを提供されませんが、開発者がREST APIメソッドを定義できるので、もともとWordPressに組み込まれているメソッド以外にも、必要なデータをカスタムエンドポイントとして利用することもできます。
WordPress REST APIのHTTPメソッド
WordPress REST APIでは、次のHTTPメソッドを使ってデータやリソースのやりとりをします。
- GET(投稿などのデータを返してくれる)
- POST(新しいデータをサイトに追加できる)
- PUT(データを更新し、更新されたデータを返してくれる)
- DELETE(データを削除し、削除したデータを返してくれる)
XML-RPCとREST API
XML-RPCでもRESTと似たようなことができますが、RESTの方が新しくセキュリティの面ではXML-RPCよりも良いと言われています。
基本的なデータの取得
WordPressでは何も設定をしなくても、REST APIを使うことができます。
http://example.com/wp-json/wp/v2/
というURにアクセスしてみると、デフォルトで大量のデータがJSON形式で提供されているのが分かると思います。
※ デフォルトで利用可能なのは基本的な情報のみなので、カスタム投稿タイプなどは別途設定が必要です。
投稿データを取得
投稿一覧のデータを取得する場合には、GETリクエストを送信します(次のURLにアクセス)。
https://example.com/wp-json/wp/v2/posts/
取得する投稿の数を指定
WordPress REST APIではパラメーターを使うこともできて、per_page=2
のようなパラメーターで投稿数を指定できます。
ちなみにこれはWordPressのWP_Query
に対応しています。
https://example.com/wp-json/wp/v2/posts/?per_page=2
上のURLでは2つの記事データを取得できます。
投稿IDを指定するとき
IDを指定してデータを取得するには、/wp/v2/posts/4/
というルートでIDが4の投稿データを取得することができます。
WordPressのget_post()
関数に対応しています。
https://example.com/wp-json/wp/v2/posts/4/
投稿を検索するとき
投稿を検索する場合には、search=○○
というパラメーターを使います。
たとえばwordpressという単語を投稿の中からREST APIで検索するときは次のようになります。
https://example.com/wp-json/wp/v2/posts/?search=wordpress
固定ページのデータを取得
複数の固定ページのデータを取得するには、投稿の場合とほとんど同じで、posts
をpages
にすれば大丈夫です。
http://example.com/wp-json/wp/v2/pages
その他のデータの取得
WordPress REST APIでは次のようにいろいろなエンドポイントが用意されています。
リソース | ベースとなるルート |
---|---|
カテゴリー | /wp/v2/categories |
タグ | /wp/v2/tags |
コメント | /wp/v2/comments |
メディア | /wp/v2/media |
ユーザー情報 | /wp/v2/users |
Media | /wp/v2/media |
設定 | /wp/v2/settings |
テーマ | /wp/v2/themes |
ブロック | /wp/v2/blocks |
たとえばカテゴリーの情報は/wp/v2/categories
というルートで取得できるので、URLは次のようになります。
http://example.com/wp-json/wp/v2/categories
上で紹介したような情報は、英語になりますが、WordPress公式サイトのREST API Handbook Endpoint Referenceに載っています。
REST APIを使ったその他の操作
投稿の新規作成
投稿を新しく作成する場合は、/wp/v2/posts
のエンドポイントに対してPOSTリクエストを送信します。
※ WordPressのwp_insert_post()
に対応。
https://example.com/wp-json/wp/v2/posts
投稿の削除
投稿を削除するには、/wp/v2/posts/123
のように投稿IDを指定してDELETEリクエストを送信します。
※ WordPressのwp_delete_post()
に対応。
https://example.com/wp-json/wp/v2/posts/123
カスタムルートの作成
デフォルトではREST APIを使って取得したり操作できる情報には限りがありますが、テーマやプラグインのPHPファイルからルートを登録することもできます。
WordPress REST APIでルートを新規作成するには、rest_api_init
というアクションフックの中でregister_rest_route()
を使用します。
add_action( 'rest_api_init', 'wcl_rest_api_init' );function wcl_rest_api_init() {// ...}
register_rest_route()の引数
register_rest_route()の引数は、次のようになります。
※ register_rest_route($namespace, $route, $args, $override)
引数 | 説明 |
---|---|
$namespace | (必須)名前空間。 たとえば wcl のように、プラグインやアプリに固有のURLセグメントを指定します。デフォルトのルートの名前空間はwp 。 |
$route | (必須)追加するルートのベースURL。 |
$args | (オプション)エンドポイントのオプション用の配列。この中にコールバック関数などを書きます。 |
$override | (オプション)ルートがすでに存在する場合に、上書きするかどうかをtrue or falseで指定。 |
register_rest_route()のHTTPメソッド
register_rest_route()関数では、上で紹介した$argsという引数のmethods
に、次のような書き方でHTTPメソッドを渡します。
HTTPメソッド | 書き方 |
---|---|
GET | WP_REST_Server::READABLE |
POST、PUT、PATCH | WP_REST_Server::EDITABLE |
DELETE | WP_REST_Server::DELETABLE |
GET、POST、PUT、PATCH、DELETE | WP_REST_Server::ALLMETHODS |
register_rest_route()の使い方
使い方というほどちゃんとしたものではありませんが、register_rest_route()
関数は次のように使います。
register_rest_route('wcl','/themes',array('methods' => WP_REST_Server::READABLE,'callback' => 'wcl_get_themes_endpoint','permission_callback' => function() { return true; }));
callback
はルートが指定したエンドポイントに一致したときに実行されます。
permission_callback
では、true or falseで関数の実行許可を与えることができます。
デフォルトのエンドポイントを編集する
WordPressでは、rest_endpoints
というフィルターフックを使って、既存のエンドポイントを編集することができます。
エンドポイントを無効にする
たとえば投稿のデータを操作する/wp/v2/posts
というデフォルトのエンドポイントを無効にしたい場合には、次のようなコードで実現できます。
※ 次のコードで投稿データの取得や作成、更新、削除する機能が削除されます。
add_filter( 'rest_endpoints', 'wcl_filter_rest_endpoints');function wcl_filter_rest_endpoints( $endpoints ){if ( isset( $endpoints['/wp/v2/posts'] ) ) {unset( $endpoints['/wp/v2/posts'] );}return $endpoints;}
プラグインで簡単にREST APIを無効にする
WordPressではデフォルトの状態でREST APIのデータが有効化されているので、表示したくないデータまで一般ユーザに表示してしまう可能性があります。
一般ユーザにはREST APIのデータを公開したくない場合は、Disable WP REST APIというプラグインが便利です。
使い方は簡単で、プラグインをインストール後に有効化するだけで、ログインしていないユーザーへのREST APIのデータの公開を制限できます。