19
APRIL
ウェブFRIDAY 2024 / 4 / 19
編集者権限でも管理画面からFlamingoにアクセスするコード
Text by Hiroyuki Matsumoto
WordPressでサイトを納品する際にクライアント様用のアカウントを作成するのですが、
(1) 大抵のことはできるけどクリティカルなことはできない編集者権限アカウント
(2) 緊急用の管理者権限アカウント
の2つをお渡しするようにしています。
通常は(1)を使っていただくことになりますが、そうすると Contact Form 7からのお問い合わせ履歴の一覧を確認できる Flamingo の管理画面には権限が不足しているためアクセスすることができません。
今までは User Role Editor プラグインを使って権限を変更することで対応していましたが、毎回するのはめんどくさいので functions.php にコードを記述して対応したいなと思ってFlamingoのソースコードを確認したところ、専用のフィルターフック flamingo_map_meta_cap で対応できることがわかりました。
下記のコードをfunctions.phpに記述することで編集者権限でもFlamingoにアクセス可能となります。
add_filter('flamingo_map_meta_cap', function($meta_caps){ foreach($meta_caps as $key=>$value){ if($value=='edit_users'){ $meta_caps[$key] = 'edit_pages'; } } return $meta_caps; }, 10, 1);
以下は蛇足。
Flamingo2.5の場合、includes/capabilities.php に権限およびフィルターフックの記載があります。
<?php add_filter( 'map_meta_cap', 'flamingo_map_meta_cap', 10, 4 ); function flamingo_map_meta_cap( $caps, $cap, $user_id, $args ) { $meta_caps = array( 'flamingo_edit_contact' => 'edit_users', 'flamingo_edit_contacts' => 'edit_users', 'flamingo_delete_contact' => 'edit_users', 'flamingo_edit_inbound_message' => 'edit_users', 'flamingo_edit_inbound_messages' => 'edit_users', 'flamingo_delete_inbound_message' => 'edit_users', 'flamingo_delete_inbound_messages' => 'edit_users', 'flamingo_spam_inbound_message' => 'edit_users', 'flamingo_unspam_inbound_message' => 'edit_users', ); $meta_caps = apply_filters( 'flamingo_map_meta_cap', $meta_caps ); $caps = array_diff( $caps, array_keys( $meta_caps ) ); if ( isset( $meta_caps[$cap] ) ) { $caps[] = $meta_caps[$cap]; } return $caps; }
先ほど掲載したコードは、edit_users という通常は管理者にしかない権限が必要としているところを
edit_pages という編集者にもある権限に変更するだけの処理です。
もしも投稿者権限等でもアクセス可能にしたい場合はこの部分を書き換えるだけで動作します。
WordPressの権限(capabilities)については下記公式ドキュメントに記載がありますのでそこから選びましょう。
TEXT by
松本 博之(まつもとひろゆき)
1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。
WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の応用情報処理技術者をなんとなくとりました。