update_site_optionとgrant_super_admin
マルチサイト利用時の特権管理者の追加
wordpressのマルチサイト環境下で各ブログサイトの管理者(administrator)に
- themeの新規追加
- themeの編集
という二つの操作を可能にするという大きなテーマの第一段階で特権管理者権限の一時的な付与という個別の課題に対応中である。特権管理者権限の付与ではなく、theme管理に関するcapabilityのみを一時的に付与する方法を当初考えていたが、権限の付与はできるものの実際にthemeの新規追加ページにアクセスすることはできなかったので、特権管理者権限の一時付与という方法で対応しようとしている。
MultisiteレベルのOptions APIでwordpressの特権管理者を追加する方法では、update_site_optionというwp_sitemetaというデータベーステーブルを安全に更新できるapiを利用して権限を付与する方法について書いた。
特権管理者権限を制御するapiは他にも存在し、
という関数も用意されているようだ。
grant_super_adminの利用方法
grant_super_adminには引数に特権管理者権限を付与したいユーザーのidを以下のような感じで指定する。
global $current_user; get_currentuserinfo(); include(ABSPATH . 'wp-admin/includes/ms.php'); grant_super_admin( $current_user->ID );
ms.phpというファイルをインクルードしておかないとエラーになるので注意したい。
特権管理者権限を削除(元に戻す)するには以下の関数を利用できる。
revoke_super_admin( $current_user->ID );
get_super_adminsで現在の特権管理者を配列で取得可能
update_site_optionとgrant_super_adminを利用して特権管理者へと一時的に昇格させることができるが、同時に利用する可能性が高い関数として
get_super_admins()
というwordpress関数がある。現在の特権管理者を配列で返してくれる関数なので、権限を付与する前の判定処理などで活用できる。
$super_admins = get_super_admins(); $admin_key = array_search( $current_user->display_name, $super_admins );
上の例では、現在の特権管理者配列にログイン中のユーザーが存在する場合には配列のキーを返し、存在しない場合にはfalseを返すようになっている。