• カミナリツイッターカミナリtwitter
  • カミナリフェイスブックカミナリfacebook
  • カミナリインスタグラムカミナリinstagram

山陰の情報を発信するカミナリ

ナビ

19

APRIL

ウェブFRIDAY 2024 / 4 / 19

編集者権限でも管理画面からFlamingoにアクセスするコード

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)については下記公式ドキュメントに記載がありますのでそこから選びましょう。

Roles and Capabilities – Documentation – WordPress.org

松本博之隠しプロフィール画像

TEXT by

松本 博之まつもとひろゆき)

1978年、鳥取県米子市生まれ。
株式会社マジックワード WEBシステムの開発・運用を担当。

WordPressの実績多数。表面的な使用方法を把握するだけでなく、WordPressのソースコードを読み解いて対応できます。
国家資格の基本情報処理技術者を保持。

この人が書いた他の記事を読む