web-dev-qa-db-ja.com

現在のユーザーはユーザーを編集できますか?

それが使用するのが良い習慣であるかどうか知りたいです:

if ( current_user_can( 'edit_user', $user_id ) ) {
    // do something
}

wordpressのドキュメントでは、この機能を見ていなかったので

1
user1147145

はい、コードに関連することをする前に、ユーザーが何かをすることができるかどうかをチェックするのは良い習慣です。

たとえば、ユーザーに必要な機能がない場合はカスタム投稿タイプを保存しないでください。あるいはmanage_options機能を持たないユーザーに特定のものを表示しないでください(通常はスーパー管理者および管理者)。

この場合の悪い習慣は、ユーザーがこれらのことをするのに必要な役割を持っていると仮定し、とにかくそれらをすることです。多くの場所(管理者メニューの登録など)では、チェックはWP Core自体によって行われますが、これはあなたがコードをどこでもcurrent_user_canのチェックで満たすべきであることを意味しません。

3
Tom J Nowell

現在行われているユーザーの能力を、問題のユーザーに対してチェックし、ブール値を返すだけです。私はあなたがやろうとしていることのより完全な全体像なしに「良い習慣」がこのシナリオに適用できるとは思わない。 (ブール値が真の場合、どのようなコードが実行されますか?)

そうは言っても、このチェックを単純に使用しても問題ないと思いますし、それは確かに「悪い習慣」ではありません。だから、それのために行きなさい。

0
SkyShab
current_user_can( 'edit_user', $user_id )

この用語は"メタ機能"edit_userのチェックを実行します。デフォルトでは、機能edit_usersにマッピングされています。これは、adminロールの一般的な機能です。さらに、現在のユーザーのIDとパラメータとして指定されたユーザーIDを比較します。これらが一致すると、ステートメントはTRUEになります。これは、各ユーザーが自分のプロファイルを編集する可能性があるためです。

これらの評価はmap_meta_capフィルタの影響を受ける可能性があります。それによって、プラグインはすべてのユーザーのサブセットに対してユーザー(またはユーザーのグループ)に特権を付与することができます。 「モデレータ」の役割などを考えています。

現在のユーザーがこのユーザーデータを編集する権限を持っている場合は、コードがユーザー関連の設定やユーザーデータを変更するたびにこのチェックを実行する必要があります。

0
David