WP REST APIにはユーザー一覧を取得するエンドポイントがあります。
ですが、通常のエンドポイントでは「非投稿ユーザー」は表示されません。
そのため、全てのユーザー一覧を取得しようとすると自分で関数追加する必要があります。
それに、エンドポイントが既知のURLのため、セキュリティ上すごく心配で夜も眠れません。
また、WP REST APIでユーザー情報を使用することはあまりないですし、セキュリティ的にも良しとはされていません。
ベストなのは、「自分で指定したエンドポイント」に「必要なユーザー」の「必要な情報」だけが表示されているという状態です。
そこで、今回はWP REST APIにユーザー一覧を出力するプラグイン「WP User to REST API」を作成しました。
機能としては下記のとおりです。
# 機能
- 通常のuser REST APIの非表示
- 指定したエンドポイントへのユーザー一覧の出力
- 権限ごとの出力
- 出力しないユーザー権限の指定
- 出力しない情報(key)の指定
メリット・デメリット
メリット
- エンドポイントを自身で設定できるので外部から情報を見られる可能性を低減できる
- jsonで見られたくない情報を非表示にできる
- 見られたくないユーザー権限の情報を非表示にできる
- 他のプラグインと合わせて権限を追加した際(例えばスタッフ権限など)、その権限のユーザー一覧をjsonで取得することができる
- 技術があれば非同期でフロントに表示するユーザー一覧を切り替えることができる
デメリット
- 野良プラグインである
- jsonを扱うので、ある程度の技術は必要
- 非表示にするkeyをjsonからコピペする必要がある
- WP REST API v2にしか対応していない
機能
通常のuser REST APIの非表示
WordPressにも初期でユーザー情報を取得するためのエンドポイントが設けられています。
/wp-json/wp/v2/users
/wp-json/wp/v2/users/{id}
ですが、投稿のあるユーザーしか表示されません。
それに、エンドポイントが一定で既知のURLになるので、悪用されないように非表示にしています。
REST APIのURL指定
セキュリティ上、同一のURLだとクラッカーに狙われそうだったのでURLはご自身で指定できるよう設定しています。
また、各項全てに言えるのですが、wp_optionsで取得してこれる形だと不安がありましたので、プラグイン専用のtableを作成しデータを保存しています。
非表示ユーザーの指定
セキュリティ上、管理者や編集者などjsonに表示させたくないユーザーもいますので、ご自身で表示するユーザー権限の範囲を設定できるようにしています。
また、管理者を絶対に表示させないようにしようかとも考えたのですが、「非表示にする情報」の設定もできるようにしたので、あえて表示させています。
でも、管理者は表示させてほしくないです。。。
非表示にする情報(key)の指定
セキュリティ上、知られたくない情報もありますし、jsonが散らかっていると仕事へのやる気が阻害されます。
そこで、不要な情報(key)を設定できるようにしました。
ユーザーの絞り込み
下記パラメーターでユーザーを絞り込むことができます。
エンドポイント | 備考 |
---|---|
/wp-json/wp/v2/{slug}/ |
通常の一覧取得 |
/wp-json/wp/v2/{slug}/{user_id} |
ユーザーIDでの指定 |
/wp-json/wp/v2/{slug}?segment={value} |
ユーザー権限による一覧取得 ex. author,contributor |
各初期値について
各項目の初期値は下記の通りです。
項目 | 初期値 |
---|---|
URL | authors |
ユーザー権限 | administrator editor |
非表示key | session_tokens wp_user_level wp_persisted_preferences show_admin_bar_front rich_editing comment_shortcuts admin_color use_ssl locale wp_capabilities first_name last_name dismissed_wp_pointers |
よくあるご質問
Q. 各プラグインのkeyは表示されますか?
プラグインの仕様にもよりますが、meta_keyが拾えるものであれば基本表示されると考えられます。
また、Advanced Custom FieldはACF to REST APIがなくても対応します。
Q. URLのslugは何文字まで可能ですか?
slugは英数字で255文字まで対応しています。
また、「-(ハイフン)」と「_(アンダースコア)」は使用可能です。
※日本語は指定できません。
Q. プラグインで追加したユーザー権限も表示されますか?
プラグインの仕様にもよりますが、ユーザー権限はWordpressの関数で取得していますので、表示されると考えられます。
Q. 対応しているバージョンは?
作成時のバージョンは下記となります。
WordPress 6.1
php 7.4
使用に際しての注意点
通常のWP REST APIによるユーザー一覧取得よりもセキュリティは高いと考えています。
ですが、ユーザー情報をWP REST APIに表示させるということ自体が、かなりの力技になります。
そのため、Wordpress本体や各プラグインのバージョン管理などはしっかり行った状態でご利用いただきたいです。
また、当プラグインが原因で損害が生じた場合の責任はとれませんので、予めご了承くださいませ。