web-dev-qa-db-ja.com

スーパー管理者に機能を追加する

私はカスタム機能を使用するプラグインを開発しています。これらの機能の一部は、スーパー管理者であるすべてのユーザーに追加する必要があります。現在、私はこのコードを使っています:

$supers = get_super_admins();
foreach ( $supers as $admin ) {
    $user = new WP_User( 0, $admin );
    $user->add_cap( 'my_cap' );
    $user->add_cap( 'my_second_cap' );
}

しかし、私が通常行う役割とは対照的に、このコードが個々のユーザーに機能を追加しているだけであることが心配です。新しいスーパー管理者が作成された場合、この機能はプラグインのアクティブ化時にのみ実行されるため、これらの機能はありません。

スーパー管理者にカスタム機能を追加するためのより良い方法はありますか?

3
shea

これは十分に文書化されていませんが、「スーパー管理者」はロールではありません(実際のロールオブジェクトではないため)。特別な「ステータス」のようなものです。

スーパー管理者(「ネットワーク管理者」または「サイト管理者」とも呼ばれる)であるユーザーのリストは、site_adminsというデータベースサイトオプションレコードに保存されます。通常、スーパー管理者は、事実上、すべての機能を持つ管理者ロールのメンバーでもあるため、管理者ロールに機能を追加するだけで十分です。

ただし、特に「通常の」管理者ではなくスーパー管理者のみに機能を追加する必要がある場合は、機能をまったく使用せずに単にWordPressのis_super_admin()関数を使用することをお勧めします。スーパー管理者に制限はありません。

本当に機能を使用する必要がある場合は、grant_super_adminフックとremove_super_adminフックを使用して、スーパー管理者ユーザーに機能を追加または削除する必要があります(それぞれ)スーパー管理者のステータスが変更されたら、

既存のスーパー管理者ユーザーの機能を変更する限り、あなたのアプローチが最適です。スーパー管理者ユーザーのリストを取得し、ループし、それぞれに機能を追加します(ただし、一度だけ実行する必要がありますEVER上記のフックを使用した場合)。

6
Matt van Andel