WordPress REST API の設定と使い方

WordPress REST API の設定と使い方

WordPress REST APIは、サードパーティのサービスとコンテンツ管理システム(CMS)とのデータ交換を可能にするインターフェースです。 データベースから直接コンテンツにアクセスできるため、シームレスな統合が実現します。

このWordPress REST APIのチュートリアルでは、このツールがどのように動作し使用するのかについて説明します。一般的な使用例やベストプラクティスもご紹介しますので、効率的な開発の参考にしてください。

完全版WordPress早見表をダウンロード

WordPress REST APIは、CMSとサードパーティのアプリケーションを統合するインターフェースです。このAPIを活用すれば、WordPressのデータや機能、コンテンツに直接アクセスすることなく、それらを使用したソフトウェアやWebサイトを開発できます。

プログラミング言語を問わず互換性を確保するために、WordPress REST APIはコンテンツをJSONデータとして取得および操作するためのエンドポイントを提供しています。

REST APIのユースケースとしては、CMSのデータや機能を利用したカスタムアプリケーションの開発が挙げられます。例えば、ヘッドレスWordPressを構築し管理ダッシュボード上にReactなどの最新フレームワークに基づいたウェブサイトを作成できます。

また、WooCommerceストアの管理にREST APIを活用すれば、在庫などの面倒な作業を自動化することができます。

WordPress REST APIの動作原理

アプリケーションプログラミングインターフェース(API)は、2つのWebサービス間の連携を可能にする一連のルールを提供します。一方、RESTはRepresentational State Transfer(表現状態転送)の略で、こうした通信を定義するアーキテクチャの標準です。

RESTの原則に準拠したWebアプリは「RESTful」であるとみなされます。例えば、統一されたインターフェースを通じて、他のアプリケーションがデータにアクセスするための単一のアクセスポイントを提供する必要があります。

REST APIは、データを交換するためにWordPressデータベースにリクエストを送信します。リクエストとは、アプリケーションに必要な情報を指定する一連の命令です。それに対して、REST APIはリクエストの内容と、処理が成功したかどうかの確認を含むレスポンスを送信します。

アプリケーションやクライアントは「ルート」を使って、必要なデータを指定します。これはREST APIを通じて特定のコンテンツ(WordPressの投稿やメタデータなど)を指し示すURLです。例えば、次のURLでページ情報にアクセスできます。

http://domain.tld/wp-json/wp/v2/pages

これらのルートはWP REST APIのエンドポイント関数にアクセスし、リクエストされたデータを操作します。ハイパーテキスト転送プロトコル(HTTP)メソッドに応じて、情報の取得・追加・編集・削除ができます。

  • GET – サーバーからデータを取得
  • POST – データベースに新しいデータを追加
  • PUT – 既存データの更新
  • DELETE – データベースからのコンテンツの削除

取得したデータはすべてJSON形式で提供されるため、他のコードで利用する前にパースする必要があります。

WordPress REST APIの設定手順

REST API機能はWordPressに標準搭載されており、デフォルトで有効になっています。WordPressホスティングプランを契約してCMSをセットアップしたら、以下のURLにアクセスしてREST APIが有効かどうか確認しましょう。

http://domain.tld/wp-json/

domain.tldの部分は実際のサイトURLに置き換えてください。エンドポイントのリストが表示されれば、WordPress REST APIは有効です。なお、この機能はWordPress 4.7以降でのみ利用可能です。

ポイント

WordPress開発を行う際は、本番環境に影響を与えないようローカルテスト環境を用意しましょう。設定ミスや予期せぬエラーからサイトのパフォーマンスやユーザー体験を守るために重要なステップです。 

次に、ローカルマシンのコマンドライン(CLI、コマンドプロンプトやターミナルなど)にcURLユーティリティをインストールしましょう。これによりWordPressサーバーとリクエストのやり取りをテストできます。

さらに、WordPress REST API用のBasic Authハンドラーをインストールして認証方法を設定すると、管理者権限が必要な非公開データへのアクセスが可能になります。

プラグインのインストール後は、WordPress REST APIを使ってHTTPリクエストを送信できるようになるので、WP-CLIを開き、SSH経由でサイトに接続します。Hostingerユーザーであれば、hPanel → Webサイト管理 → 詳細設定 → SSHアクセスから認証情報を確認できます。

WP REST API認証が正しく機能するか確認するため、制限付きデータへのアクセスをテストしてみましょう。

例えば、以下のコマンドをローカル環境のコマンドラインで実行すると、下書き状態の投稿を取得できます。

curl -X GET --user username:password -i http://domain.tld/wp-json/wp/v2/posts?status=draft

WordPress REST APIの使用方法

レンタルサーバーとテスト環境を整えたら、いよいよWordPress REST APIを実際に使っていきましょう。ここでは日常的な使用例を紹介します。

重要!本格的な開発に入る前に、APIコールの各メソッドとJSONデータ構造をしっかり理解しておくと、生データをスムーズに扱えるようになります。

1. GETリクエストでデータを取得する

GETメソッドを使えば、REST APIを通じてWordPressサイトのデータを簡単に取得できます。例えば、postsエンドポイントを使って投稿コンテンツを取得してみましょう。

GET http://domain.tld/wp-json/wp/v2/posts/

このAPIリクエストを実行すると、サイト内のすべての投稿データ(ID、コンテンツ、タイトルなど)がJSON形式で出力されます。 cURLを使用して実行した場合、出力は以下のようになります。

同様に、対応するエンドポイントを指定すれば固定ページ情報も取得できます。

GET http://domain.tld/wp-json/wp/v2/pages/

出力形式は投稿と似ていますが、得られるのは固定ページのデータであり、エンドポイント名を指定することでカスタム投稿タイプの情報も取得可能です。

GET http://domain.tld/wp-json/wp/v2/custom-post-type/

例えば、次のコマンドで商品ページというカスタム投稿タイプのデータを取得できます。

GET http://domain.tld/wp-json/wp/v2/product-page

重要!テスト段階ではREST APIのリクエストにWP-CLIでcURLを使うことをお忘れなく。実際のアプリケーションのコードでは、JavaScriptのFetchなどの関数やライブラリを活用します。

クエリパラメータを追加すれば、データの出力を変更できます。例えば、投稿を作成日の新しい順に並べ替えるには次のようなエンドポイントを指定します。

/wp-json/wp/v2/posts?orderby=date&order=desc

また、pageper_pageパラメータを使えば、以下のように必要な数だけ特定ページの投稿を取得できます。

/wp-json/wp/v2/posts?page=2&per_page=10

このエンドポイントを使用することでGETメソッドで投稿を10件ごとにページ分割し、2ページ目のデータを取得します。

WordPressは特定の条件でデータをフィルタリングするための様々なクエリパラメータを提供しています。詳しくは投稿REST APIリファレンスのドキュメントを参照してください。

2. POSTリクエストでコンテンツを作成する

POSTメソッドを使うと、特定のエンドポイントを使用してWordPressデータベースに新しいコンテンツを追加できます。例えば、次のプロンプトで新規投稿を作成します。

POST http://domain.tld/wp-json/wp/v2/posts/

同様に、それぞれのエンドポイントを使って、新しい固定ページやカスタム投稿タイプのエントリも作成可能です。

POST http://domain.tld/wp-json/wp/v2/pages/
POST http://domain.tld/wp-json/wp/v2/custom-post-types/

タイトル公開ステータスコンテンツなど必要な情報を含む完全なエントリを作成するには、アプリケーションのコードでこれらの詳細を指定する必要があります。

なお、WordPress REST APIにおけるPOST操作には通常、管理者権限が必須です。OAuth認証などを使用している場合は、必ず認証トークンを付加してください。

また、アプリケーションの安定性を高めるためには、POSTリクエストが成功したかどうかを確認するレスポンス検証の仕組みも組み込んでおきましょう。

3. コンテンツの更新と削除

WordPress REST APIのPUTメソッドを使えば、特定の投稿やページ、カスタム投稿をそのIDを使って更新できます。例えば、新しいコンテンツを挿入したり、公開ステータスの更新などが可能です。

基本的な構文は他のAPIの呼び出しメソッドと似ていますが、ルートの末尾に投稿IDを指定します。

PUT http://domain.tld/wp-json/wp/v2/posts/ID

次に、更新したい内容を指定します。例えば、新しいコンテンツを挿入するには、次の行を追加します。

{
"content" = "publish"
}

投稿、ページ、またはカスタム投稿エントリを削除する場合も、次の例のように ID が使用されます。

DELETE http://domain.tld/wp-json/wp/v2/posts/ID

デフォルトでは、DELETEメソッドはコンテンツをゴミ箱に移動するだけなので、必要に応じて復元が可能です。完全に削除したい場合は、forceパラメータを追加します。

DELETE http://domain.tld/wp-json/wp/v2/posts/567?force=true

偶発的なデータ損失を引き起こす可能性があるため、可能であれば、force 引数を避けることをお勧めします。

4. カスタムエンドポイントの活用

WordPress REST APIは機能があらかじめ定義された複数のデフォルトのエンドポイントを提供しています。しかし、アプリケーションが特定のデータを必要とする場合、これらのエンドポイントだけでは足りないこともあるでしょう。

フィルタやクエリパラメータを駆使してデフォルトエンドポイントの出力をカスタマイズすることも可能ですが、余分なコードが必要になり効率が下がります。また、フォーム送信データなど特殊なコンテンツの取得が難しいケースもあります。

そこで、特定のニーズに合わせてデータアクセスを簡素化するには、カスタムエンドポイントの作成が有効です。テーマファイルエディターfunctions.phpを変更するか、カスタムのWordPressプラグインを開発することで実装できます。

カスタムエンドポイントを登録するには、ルート、コールバック関数、クエリメソッドを含む以下のコードを追加します。

add_action( 'rest_api_init', function () {
register_rest_route( 'your_namespace/v1', '/your_endpoint/', array(
'methods' => 'GET',
'callback' => 'your_endpoint_callback',
) );
} );

続いて、エンドポイントにアクセスした際に実行されるコールバック関数を定義します。この関数でデータ処理を行い、適切なレスポンスを返します。

function your_endpoint_callback( $data ) {
// Your logic to handle the request like returning a JSON response
return array( 'message' => 'Your custom endpoint works!' );
}

具体例として、フォーム送信がカスタム投稿タイプとして保存されるWordPressサイトがあるとします。以下のコードを追加することで送信データを取得するカスタムエンドポイントを作成できます。

add_action( 'rest_api_init', function () {
register_rest_route( 'custom/v1', '/form-submissions', array(
'methods' => 'GET',
'callback' => 'get_form_submissions',
) );
} );

function get_form_submissions() {
$args = array(
'post_type' => 'form_submission',
'posts_per_page' => -1,
);

$form_submissions = get_posts( $args );

$response = array();
foreach ( $form_submissions as $submission ) {
$response[] = array(
'id' => $submission->ID,
'title' => $submission->post_title,
'content' => $submission->post_content,
'author' => $submission->post_author,
'created_at' => $submission->post_date,
// Add more fields as needed
);
}

return $response;
}

get_posts関数で送信データを反復処理し、GET メソッドを使用して次のURLでアクセスできます。

GET http://domain.tld/wp-json/custom/v1/form-submissions

5. 認証方法の選択

WordPress REST APIの認証は、有効なクライアントとの安全なデータ通信を保障します。ユーザーは、アプリケーションの要件に応じて、様々な認証メカニズムから選択できます。

WordPressはデフォルトでCookie認証を採用しています。ログインユーザーに認証Cookieを発行し、APIリクエストのヘッダーに含めることで認証します。この方法はシンプルですが、WordPress外部のサードパーティのWebサービスとの連携には不向きです。

もう一つの方法としてOAuth認証があります。これは認証トークンを使用してWebサービスからのリクエストを検証します。ユーザーの認証情報を使用しないため柔軟性と信頼性が高くなります。ただし、設定セットアップはやや複雑になることがあります。

OAuth認証を実装するには、WordPress REST API GitHubリポジトリの公式プラグインを利用してください。また、OAuth 2.0は実装が比較的容易で拡張性に優れており、バージョン1.0よりも現代的なアーキテクチャを採用しているため、おすすめです。

WordPress REST APIの使用例

WordPress REST APIは様々なWeb開発のタスクやアプリケーションで活躍します。例えばCMSから投稿を取得し、他のWebサイトで表示したり、他のウェブサイトに表示してコンテンツを配信することができます。

もう1つの活用例は、既存の静的サイトからWordPressバックエンドへのデータ送信を可能にすることです。データベースを手動で設定する代わりに、、CMSの機能を活用してデータを保存できるため、開発プロセスが簡素化されます。

また、WordPress API連携を使えば、サイトコンテンツの自動更新も可能になります。たとえば、ログインせずにPUTメソッドを活用してApple Newsから記事を自動的に取り込むことができます。

さらに高度なREST APIの活用例として、ヘッドレスCMSの構築があります。たとえば、コンテンツ管理にはWordPress管理画面を使ったニュース中心のモバイルアプリを開発することができます。

APIの実際の応用例としては、ブロックエディター用にデータベースから特定の投稿データを取得することなどが挙げられます。また、プラグインを使用してWordPressサイトにGoogleマップを表示することも挙げられます。

WordPress REST APIを使いこなすためのベストプラクティス

WordPress REST APIをWeb開発やWebの統合に効率的に活用するには、以下のポイントを押さえておきましょう。

適切な認証方法を選択する

適切な認証を設定することで、WordPress REST API のセキュリティが向上し、認証済みユーザーやアプリケーションのみが機密データにアクセスできるようになります。

これにより、セキュリティ脆弱性を最小限に抑え、不正アクセスやデータ漏洩を防止できます。実装のしやすさ、拡張性、プロジェクト要件を考慮して最適な認証方法を選びましょう。

入力データを検証する

WordPress REST APIでは、特に全ユーザーがアクセスできる公開データを扱う場合、入力の検証が極めて重要です。 外部ソースからの入力は必ず検証とクリーニングを行い、悪意あるコードがCMSに侵入するのを防ぎましょう。

この対策はSQLインジェクションやクロスサイトスクリプティング(XSS)などのセキュリティの脆弱性からWordPressを守る役割も果たします。

WordPressにはsanitize_text_field()sanitize_email()sanitize_url()など、入力データを検証するための関数が用意されています。 取得したコンテンツを受け取って解析するアプリケーションのコードに、これらの関数を追加してください。

キャッシュ機能を活用する;

キャッシュ機能はWordPressサイトのパフォーマンスと拡張性を大幅に向上させます。頻繁にアクセスされるデータをメモリに保持することで、サーバー負荷を軽減し、応答時間を短縮できます。 これにより、クライアントとAPIはより速くデータを取得できます。

サーバー負荷を最小限に抑えることで、アクセスが集中する時間帯(スパイク時)でもAPIの安定稼働が期待できます。多数のクライアントが同時にリクエストを送信すると、データベースがパンクしてダウンタイムが発生する恐れがありますが、キャッシュ機能がそのリスクを軽減します。

LiteSpeed Caching やW3 Total Cacheなど、WordPressでは様々なキャッシュプラグインが利用可能です。

リクエストとコードを最小限に抑える

アプリケーションとWordPressのパフォーマンスを最大化するには、APIコール数を最小限に抑えてください。また、特定のタスクに関連するリクエストはまとめて同時に送信し、通信回数を最小限に抑えることもできます。

同時に、コード自体も冗長な処理を避け、シンプルかつ効率的に保つよう心がけてください。これによりリソース消費を最小限に抑えるだけでなく、保守性と拡張性の向上にも貢献します。

ソフトウェアを常に最新状態に保つ

安定した運用を維持するため、WordPressコア、プラグイン、テーマなど、サイトで使用するソフトウェアは定期的に更新しましょう。最新の機能を活用できるだけでなく、Webサービス間の連携もスムーズになります。

また、最新バージョンには重要なセキュリティパッチやバグ修正が含まれているため、使い勝手の向上にもつながります。WordPressのニュースレターやブログをチェックして、常に最新情報を把握しておくことを推奨します。

まとめ

WordPress REST APIは、CMSとサードパーティのWebサービスをシームレスに連携させる機能です。主にWordPressコンテンツを活用したアプリケーション開発やヘッドレスCMS構築に利用されています。

REST APIはWordPressコアに標準搭載されており、WP-CLIとcURLを使ってリクエストをテストできます。ルートを指定してエンドポイントにアクセスし、HTTPメソッドでデータ操作を行います。

GETメソッドでWordPressの投稿などのデータをアプリケーションで取得し、POSTコマンドを使ってでコンテンツを追加したり、PUTで既存エントリを編集したり、DELETEでリソースを削除できます。

この機能を使う際は、OAuthやBasic Authなどの適切な認証を設定しましょう。また、コードをシンプルに保ち、キャッシュを活用してアクセス集中時のパフォーマンスを確保することも重要です。

WordPress REST APIに関するよくある質問

ここでは、WordPress REST APIについてよく寄せられる質問をまとめました。

WordPress REST APIを使うメリットは何ですか?

JSON REST APIを活用すれば、WordPressを他のWebサービスと連携させることができます。ユーザーが管理画面を直接操作することなく、CMSのデータや機能に直接アクセスできます。  

REST APIからデータを取得するにはどうすればよいですか?

WordPress REST API からデータを取得するにはGETメソッドを使用し、エンドポイントにHTTPリクエストを送信します。JavaScriptのFetch APIやWP-CLIのcURLなど、HTTPをサポートするツールを使用できます。取得したJSONデータはアプリケーションのプログラミング言語に応じて解析します。 

WordPress REST APIの使用に制限はありますか?

はい。REST API経由で取得できる1ページあたりの最大投稿取得数は100件に制限されています。また、API経由でのデータ取得は直接データベースでクエリを実行するよりも計算リソースを消費するため、パフォーマンスの問題が発生する可能性があります。 

どのような人がWordPress REST APIを学ぶべきですか?

CMS機能を活かしたアプリケーションやWebサービスの開発を目指すWordPress開発者は、REST APIを学ぶべきです。また、WordPressのヘッドレスCMSを開発したり、コンテンツを別プラットフォームへ移行したいユーザーにもREST APIは必須です。

Author
著者

Yūto Ōmura

イギリスから日本へ帰国後、翻訳者として8年従事。英国の大学ではメディア・映像を専攻し、以来、日英両言語にて10年以上複数のウェブサイトおよび動画メディアを運営。プライベートでは、料理をしたり、家族で小旅行に行ったりするのが好きです!