2026年6月27日

2026年6月27日

WordPressのプロフィール更新を特定ロールに制限する方法

はじめに

この記事では、特定のユーザーが自分のプロフィールを更新できるようにする一方で、他のユーザーにはその機能を制限する方法について説明します。これにより、サイト管理者は組織内の役割に基づくアクセス権限をより細かくコントロールすることができます。

症状・背景

このテーマが必要になる主な場面:

  • ユーザーが自分のプロフィール情報を更新できるようにしたいが、他のユーザーにはその機能を制限したい場合
  • 特定の役割(例:投稿者)にのみプロフィール編集権限を与えたい場合
  • サイト管理者として、組織内のアクセスコントロールポリシーを厳格化したい場合

手順・設定方法

ステップ1: フィルター関数を作成

まずは、ユーザーが自分のプロフィール情報を更新できるかどうかを判断するためのフィルターハンドラをカスタムプラグインやフュニクチャープレフィックスファイルに作成します。

# WordPressのアクション/フィルターを使用して、ユーザーのプロフィール編集権限を制御する関数を作成します。
function restrict_profile_editing( $allcaps, $cap, $args ) {
    if ( ! is_user_logged_in() || empty( $args[0] ) || 'edit自己的资料' !== $args[0] ) {
        return $allcaps;
    }

    // 特定のロール(例:投稿者)のみがプロフィールを編集できるようにする
    if ( in_array('contributor', (array) wp_get_current_user()->roles, true ) ) {
        $allcaps[$cap] = true;
    } else {
        $allcaps[$cap] = false;
    }

    return $allcaps;
}
add_filter( 'user_has_cap', 'restrict_profile_editing', 10, 3 );

ステップ2: プロフィール編集権限を特定の役割に制限

次に、プロフィールページへのアクセスとその中の編集操作を特定のユーザー役割(例えば投稿者)だけに限定します。

# 特定のユーザーが自分のプロフィール情報を更新できるようにするための条件を設定します。
function restrict_profile_edit_access() {
    if ( is_admin() && isset( $_GET['action'] ) && 'edit' === $_GET['action'] && isset( $_GET['user_id'] ) && get_current_user_id() !== $_GET['user_id'] ) {
        wp_die( esc_html__( 'あなたは他のユーザーのプロフィールを編集する権限がありません。', 'textdomain' ), 403 );
    }
}
add_action( 'admin_init', 'restrict_profile_edit_access' );

ステップ3: ユーザー役割に基づくカスタムメッセージ

プロフィールページへのアクセスが制限された場合、ユーザーに対して適切な通知を表示します。

# 特定のユーザーが自分のプロフィール情報を更新できない場合は警告メッセージを表示します。
function show_profile_restriction_message() {
    if ( is_admin() && isset( $_GET['action'] ) && 'edit' === $_GET['action'] && isset( $_GET['user_id'] ) && get_current_user_id() !== $_GET['user_id'] ) {
        printf(
            '<div class="notice notice-error"><p>%s</p></div>',
            esc_html__( 'あなたは他のユーザーのプロフィールを編集する権限がありません。', 'textdomain' )
        );
    }
}
add_action( 'admin_notices', 'show_profile_restriction_message' );

ステップ4: ログと監視

アクセス制御設定後のログと監視のため、ユーザー活動を追跡します。

# 特定のアクション(例:プロフィール編集)についてログを記録します。
function log_profile_edit_activity( $user_id, $old_user_data, $new_user_data ) {
    if ( is_admin() && 'edit' === $_REQUEST['action'] && get_current_user_id() !== $user_id ) {
        error_log( sprintf( 'ユーザーID: %d が他のユーザーのプロフィールを編集しようとした', $user_id ) );
    }
}
add_action( 'profile_update', 'log_profile_edit_activity', 10, 3 );

注意事項

  • フィルターハンドラ関数は、特定の役割にのみプロフィール編集権限を付与します。
  • user_has_cap フィルターを使用することで、サイト管理者がユーザー権限を細かく制御できます。
  • 特定のユーザーが自分のプロフィール情報を更新できない場合、適切なメッセージを表示してユーザーエクスペリエンスを改善します。
  • アクセス権限設定後は、ユーザー活動をログに記録し、サイト管理者はアクセス制御ポリシーを維持することができます。

まとめ

1. フィルターハンドラの実装: ユーザーのプロフィール編集機能を特定の役割(ロール)に限定するためのPHPコードを作成します。

2. アクセス制限: 特定のユーザーが自分のプロフィール情報を更新できるようにし、他のユーザーにはその機能を禁止します。

3. カスタムメッセージ: ユーザーがアクセス権限がない場合に適切な警告メッセージを表示します。

4. ログと監視: アクセス制御設定後のユーザー活動を追跡してポリシーの維持を助けます。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ