update_site_optionでwordpressマルチサイトのsuper admin権限を付与
update_optionとupdate_site_option
wordpressにはOptions APIというインタフェースが存在し、マルチサイト環境では各ブログのwp_optionsというデータベーステーブルの値を更新したり新規に追加、削除というdb操作を安全に行うことができる。
wordpressをマルチサイトとして運用する場合には、個別のブログの上位に位置するシステム全体で管理されるデータが存在し、そのデータをプログラムで制御するためのoptions apiも存在する。
update_optionで各ブログを制御し、update_site_optionでマルチサイト全体を制御するために利用できる。
特権管理者を増やす
update_site_optionを利用
update_site_optionを利用して特権管理者(super admin)を増やす操作をやってみようと思う。
wpのマルチサイト環境では、サイト管理者(administrator)という個々のブログ管理者の上位に特権管理者が存在し、マルチサイト全体を制御できるのは特権管理者に限られる。特権管理者にできて、サイト管理者にできない操作として具体的には、
- プラグインのインストール
- テーマのインストール
がある。
上の操作をサイト管理者に一時的に権限を付与することで各ブログのサイト管理者(administrator)であっても上の二つの操作をできるようにしてはどうか?というのが大きなテーマではあるが、その前に
サイト管理者 → 特権管理者
への一時的な移行を行えるようにしたい。
// 現在のユーザー情報を取得 global $current_user; get_currentuserinfo(); // wpインストール時に指定した特権管理者名を指定 $admins = array('firstadmin'); if( $current_user->display_name != "firstadmin" ) // firstadmin以外の場合 { $admins[] = $current_user->display_name; // 配列にユーザー名を追加 } update_site_option('site_admins', $admins); // データベースを更新
firstadminはwordpressをインストールした際に指定したユーザー名で、このidはデータを更新しても必ず特権管理者として設定されるように$admins配列の先頭に設定されるようにしています。
特権管理者は手動でも追加できる
マルチサイト環境の特権管理者権限はwordpressの管理画面からも追加することができる。
サイトネットワーク管理者のダッシュボード → ユーザー → 特権管理者権限を付与したいユーザーを選択 → ユーザーの編集画面が表示される
URLだと
wp-admin/network/user-edit.php?user_id=5
という感じのURLになる。そのページの
このユーザーにネットワークの特権管理者権限を与える。
というチェックボックスをオンにすると特権管理者権限が付与される。
wp_optionsとwp_sitemeta
update_optionはwp_optionsテーブルのデータを安全に変更できるapiで、update_site_optionはwp_sitemetaのデータをwordpressのapi経由で変更できるという位置づけになる。update_site_optionで指定できるキー情報は直接データベースを見て確認することができ、具体的な例として上で示したように
site_admin
を指定してみた。
特権管理者権限という重要なデータもoptions apiでカスタマイズ可能だ。