[WordPress] REST APIで外部システムから投稿するには(1/2)

WordPressとは別の既存CMSがあります。このCMSに蓄積されたデータをWordPressで表示したいという要望があります。そこで、このCMSからWordPressへREST APIで新規投稿/編集/削除するようにしました。

WordPress REST APIとは

今でもxmlrpc.phpがあるけど、それとは違うものなのかな?

外部システムとWordPressとの間の通信方法として、xmlrpc.php がありました。XMLを使ったXML-RPCというデータ通信に対応しています。現在もWordPressにxmlrpc.phpが残っていて使うことができます。

現在は、新しいWordPress REST APIがあります。REST形式のURLにリクエストすると、レスポンスデータはJSONで返ってきます。リクエストデータにもJSONデータを使うことができます。新規に使う場合は、xmlrpc.phpより、WordPress REST APIを使ったほうがいいでしょう。

例えば、投稿一覧を取得するには、curlコマンドを使って、

$ curl "http://localhost/wp-json/wp/v2/posts"

投稿ID=1を指定して、投稿データを取得するには、

curl http://localhost/wp-json/wp/v2/posts/1

レスポンスはJSONで返ってくるのね

WP REST API v2 Documentation
Documentation for version 2.0 of the WP REST API.

Application Passwords plugin

投稿一覧や投稿データの取得は、認証は必要ありません。しかし、変更する操作、つまり新規、編集、削除するには、認証が必要です。

そうでないと、誰でも編集や削除ができてしまうわね

WP REST API v2 Documentation
Documentation for version 2.0 of the WP REST API.

上記「WP REST APIの認証」に、クッキー認証、OAuth認証、アプリケーションパスワードまたはベーシック認証の説明があります。

読んでいると眠くなっちゃうよ、つまりどれを使えばいいのかな

クッキー認証は、WordPressプラグインやWordPressテーマ向けのようです。

OAuth認証は、外部システムのログインをWordPressログインで認証するものです。「FaceBookでログイン」や「Googleアカウントでログイン」みたいなものです。

アプリケーションパスワードは、WordPressに「Application Passwords」pluginをインストールします。通常のWordPressログインパスワードとは別の、アプリケーションパスワードを作っておきます。外部からREST URLにアクセスするとき、このアプリケーションパスワードを付けてアクセスします。

クラウドサービスのAPIキーシークレットみたいなものね。

今回は、アプリケーションパスワードを使うことにしました。

WordPress管理画面のプラグインで、新規追加ボタンをクリックします。

キーワードに「Application Passwords」を入力すると、「Application Passwords」が表示されるので、「今すぐインストール」をクリックします。

インストールしたら、「有効化」ボタンをクリックします。

この案件では、投稿者名は表示しません。そこで、外部システム用ユーザを新規に作り、名前は「xxxcms_rest_api」、権限グループは「編集者」にしました。

ユーザの詳細ページを表示して、一番下へスクロールすると、Application Passwordsの項目があります。

入力欄に適当な名前、例えば「#1」を入力します。

ここで入力した名前「#1」がユーザー名になるのかな?

違うのよ。認証時のユーザー名はWordPressのユーザー名よ。

「Add New」ボタンをクリックします。

パスワードが表示されるので、安全なファイルにコピペしておきます。

このダイアログを閉じると、パスワードは二度と表示されません。

コピペする前に閉じちゃったよ〜

心配しないで。いま作ったパスワードを削除して、新たにパスワードを作ればいいのよ。

コピペしたファイルを削除しちゃったよ〜

もしコピペする前に閉じてしまったり、コピペしたファイルを紛失してしまったら、そのパスワードはRevokeして、新しいパスワードを発行します。

読みやすいように4文字ごとにスペース区切りで表示されていますが、実際にプログラムで使うときは、スペースを削除します。

タイトルとURLをコピーしました