REST API経由でWordPressに記事を投稿・更新する方法について解説します。 REST APIの認証プラグインをWordPress上にインストール・設定を行い、Thunder ClientからPOSTメソッドでの疎通テストを行うところまで実施します。
目次:
REST API経由でWordPressに記事を投稿・更新する
WordPressのREST APIはGETメソッドについては認証なしで利用可能なのですが、POST, UPDATE, DELETEの操作を行うには認証を得る必要があります。
Authentication | REST API Handbook | WordPress Developer Resources
WordPress本体として提供されている認証機能はCookie認証ですが、今回は認証機能を設置してくれるプラグインを利用。
公式Docsで紹介されている公式のプラグイン WordPress REST API – OAuth 1.0a Server は最終更新が6年前とあり、推奨できません。
評価が高く、最近でもアップデートされている miniOrangeによるWordPress REST API Authentication というプラグインをインストールします。
一部は有料機能ですが、基本的なAPI認証は無料で実施することが可能。
WordPress REST API Authenticationのプラグイン設定
REST API Basic認証を設定します。
miniOrangeによるWordPress REST API Authenticationは動画による解説があり、分かりやすいのですが、アップデート前の録画なのか、一部実際のプラグイン画面と異なっています。
公式セットアップドキュメントの画面は最新のものが反映されているので、こちらの情報に従うのが良いでしょう。
miniOrange API Authentication > Configure Methods > BASIC AUTHENTICATIONを選択。
Username & Password with Base64 Encodingが選択されていることを確認し、右上のNextをクリック。
最後に設定確認画面が表れます。Finishをクリックして設定完了。
本来はこの画面でWordPressのユーザー名とパスワードを入力することで疎通テストができます。
しかし、私の場合はプラグインでパスワード認証をかけていたためか、テストでは「400: ユーザー名が存在しません」 というエラーが返ってきてしまいました。
Postman, Thunder Clientなどによるテストでは通過可能が確認できるはずなので、一旦作成だけしておきます。
Thunder ClientからAPI疎通テスト
Postman, またはThunder ClientからAPI疎通テストを行います。以下、VS拡張機能であるThunder Clientの画面で解説します。
エックスサーバーの海外REST APIアクセス制限はONにしたままでOK
対象サイトを設置していたエックスサーバーには、海外からのREST APIアクセスを制限するWordPressセキュリティ設定があります。こちらはONにしたままで問題なくAPIを利用することが出来ました。
Thunder ClientによるGETメソッドでのテスト
メソッドをGETに、URLを “https://yourdomain.com/wp-json/wp/v2/posts/” にセットします。
Auth > Basic から、投稿・公開権限をもつWordPressユーザー名およびWordPressパスワードを入力。
WordPressユーザー名のところはメールアドレスはNGです。ユーザー名のみ通過可能。
下の画像のように200OKというレスポンスが返ってきたら成功です。
GETメソッドについては、初期状態ではWordPressユーザー名・パスワードは特に必要ありません。
WordPress REST API Authenticationプラグインによって、WordPressログイン情報をヘッダーに記述しなければ認証をクリアできないようになったのです。
試しにBASIC情報を空欄にしてみると、401エラーが返ってくるのが分かります。
“posts/10” のようにURLの末尾に記事IDを追加してGETリクエストを送ると、該当の個別記事についてのレスポンスを得られます。
Thunder ClientからPOSTメソッドのテスト
次にPOSTメソッドで新規記事をAPIから投稿するテストを行います。
POSTの場合も、URLとBASIC認証のところはGETと同じ。
加えて、Bodyに以下のようなJson情報をもたせて実行します。
{
"title": "My New Post",
"content": "This is the content of my new post.",
"status": "publish"
}
下記のようにレスポンスで201が返ってきたら投稿成功です。
以上で実際にWordPressサイトを見てみると、新規記事が作成されているのを確認できます。 お疲れさまでした!
この記事の気になった箇所を読み返す:
Category: WordPress