概要
user_can_for_site
フィルタは、任意のユーザーに指定されたサイトの権限があるか調べるために使われるフィルタです。このフィルタは、マルチサイトの環境で特定のユーザーが特定のサイトで特定の権限を持つかどうかを評価する場面で非常に役立ちます。主に以下のような機能を実装する際に使用されます。
- サイトごとのユーザー権限のカスタマイズ
- ユーザーレベルに基づく条件付き表示
- マルチサイト機能におけるアクセス制御
- 特定のコンテンツへのセキュリティチェック
- プラグインの設定における権限管理
- サイトごとの管理者権限の管理
- APIエンドポイントの権限評価
- ショートコードの権限確認
構文
add_filter( 'user_can_for_site', 'custom_user_can_for_site', 10, 4 );
パラメータ
$allowed
(bool): ユーザーが指定された権限を持つかどうか。$user_id
(int): チェック対象のユーザーID。$cap
(string): 権限名。$site_id
(int): チェック対象のサイトID。
戻り値
- (bool) ユーザーが指定された権限を持っている場合は
true
、そうでない場合はfalse
を返します。
関連する関数
https://refwp.com/?titleonly=1&s=user_can_for_site
使用可能なバージョン
このフィルタは、WordPress 3.0 から使用可能です。
ワードプレスのコアファイルのパス
wp-includes/capabilities.php
この関数のアクションでの使用可能性
アクション | 使用例 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |
サンプルコード
サンプルコード1: 権限を確認する
このサンプルコードは、特定のユーザーが特定のサイトで特定の権限を持っているかどうかをチェックします。
function check_user_capability( $allowed, $user_id, $cap, $site_id ) {
if ( $cap === 'edit_posts' && $user_id === 1 ) {
return true; // ユーザーID 1 の場合は常に権限を与える
}
return $allowed;
}
add_filter( 'user_can_for_site', 'check_user_capability', 10, 4 );
出典: https://developer.wordpress.org/reference/hooks/user_can_for_site/
サンプルコード2: 複数の条件で権限を確認
このコードは、特定の条件のもとでユーザーの権限を確認します。
function custom_user_permissions( $allowed, $user_id, $cap, $site_id ) {
if ( is_admin() && ! is_super_admin( $user_id ) ) {
return false; // 管理者画面ではスーパーユーザー以外は権限を持たない
}
return $allowed;
}
add_filter( 'user_can_for_site', 'custom_user_permissions', 10, 4 );
出典: https://developer.wordpress.org/reference/hooks/user_can_for_site/
サンプルコード3: 特定サイトでの権限管理
このサンプルコードでは、特定のサイトで権限を持っているかどうかを制御します。
function site_specific_capability( $allowed, $user_id, $cap, $site_id ) {
if ( $site_id == 2 && $cap === 'publish_posts' ) {
return false; // サイトID 2 では投稿を公開できない
}
return $allowed;
}
add_filter( 'user_can_for_site', 'site_specific_capability', 10, 4 );
出典: https://developer.wordpress.org/reference/hooks/user_can_for_site/
サンプルコード4: サイトによる条件付き権限
このコードは、ユーザーが特定のサイトで権限を持っているかどうかを判断します。
function conditional_user_capability( $allowed, $user_id, $cap, $site_id ) {
if ( $site_id == 3 ) {
return user_can( $user_id, 'edit_posts' ); // サイトID 3 では、通常の権限に基づいて評価
}
return $allowed;
}
add_filter( 'user_can_for_site', 'conditional_user_capability', 10, 4 );
出典: https://developer.wordpress.org/reference/hooks/user_can_for_site/
サンプルコード5: 条件に基づいたカスタムロジックの追加
このコードは、特定の条件に基づいてカスタムのロジックを実装します。
function custom_logic_user_capability( $allowed, $user_id, $cap, $site_id ) {
if ( $cap === 'delete_posts' && current_user_can( 'administrator' ) ) {
return true; // 管理者は常に投稿を削除できる
}
return $allowed;
}
add_filter( 'user_can_for_site', 'custom_logic_user_capability', 10, 4 );
出典: https://developer.wordpress.org/reference/hooks/user_can_for_site/