web-dev-qa-db-ja.com

ユーザーが管理者でスーパー管理者ではない場合、current_user_can( 'Administrator')はマルチサイトでtrueを返しません。

私はマルチサイトのWordPressインストールをセットアップしていて、両方のサイトで '管理者'ロールに設定されているユーザーを持っています。しかし、関数current_user_can('Administrator')は、ログインしたときにtrueを返さないので、期待していました。

しかし、私のユーザーアカウントは両方のサイトの '管理者'であり、ネットワークの 'スーパーアドミン'でもあり、呼び出しは私には真を返します。

どうしてこれなの?最初のユーザーは、単に「管理者」ではなく、「スーパー管理者」をチェックする場合にのみ偽にならないようにする必要がありますか?

これが問題になる場合、ユーザーが「スーパー管理者」にならずに「管理者」の役割に設定されているかどうかを確認できる他の方法はありますか?

1
Blake Mann

Current_user_can( 'Administrator')がユーザーに対してtrueを返すべきであることに同意します。ただし、current_user_canは主に機能をチェックすることを目的としています。これは一般に、より堅牢なチェックです。

私はこのようなことを提案したいと思います(未テスト):

if ( current_user_can( 'activate_plugins' ) && ! current_user_can( 'update_core' ) ) {
//...
}

ですから、これは現在のユーザーがプラグインを有効にすることはできてもコアを更新できないかどうかをチェックしています。これは管理者にはtrueを返し、ネットワーク管理者にはfalseを返します。マルチサイトのupdate_coreはネットワーク管理者用に予約されています。

1
vancoder

式の中にタイプミスがあり、current_user_can('administrator')の代わりにcurrent_user_can('Administrator')を使用する(Aの代わりにa)。

3
dvp