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"
Code language: Bash (bash)
投稿ID=1を指定して、投稿データを取得するには、
curl http://localhost/wp-json/wp/v2/posts/1
Code language: Bash (bash)
レスポンスはJSONで返ってくるのね
Application Passwords plugin
投稿一覧や投稿データの取得は、認証は必要ありません。しかし、変更する操作、つまり新規、編集、削除するには、認証が必要です。
そうでないと、誰でも編集や削除ができてしまうわね
上記「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文字ごとにスペース区切りで表示されていますが、実際にプログラムで使うときは、スペースを削除します。