web-dev-qa-db-ja.com

ユーザーが自分のプロフィール情報を編集できないようにする

私は現在イントラネットを開発していて、役割と機能を制御するためにJustin TadlockのMembersプラグインを使用しています。

私は人事部のスタッフがユーザーアカウントを作成および編集できるようにするためにHRロールを作成しました。 WPで作成されたすべてのスタッフにcontributorロールが割り当てられ、選択された少数のメンバーからeditorおよびadministratorロールが割り当てられます。

私が欲しいのは、スタッフがログインして自分のプロフィール情報を変更しないようにすることです。プロファイル情報を編集できるのはHRロールのスタッフだけです。

7
Brady

少し時間をかけて解決しました。これが私が使っているコードです:

<?php
/*
Plugin Name: Restrict User Editing Own Profile
Plugin URI: http://www.philosophydesign.com
Description: Restricts users from editing their own profile information.
Author: Scott Cariss
Version: 0.1
Author URI: http://www.philosophydesign.com/scott-cariss.html
*/

add_action( 'admin_menu', 'stop_access_profile' );
function stop_access_profile() {
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
    if(IS_PROFILE_PAGE === true) {
        wp_die( 'You are not permitted to change your own profile information. Please contact a member of HR to have your profile information changed.' );
    }
}
?>

上記のコードは、自分が誰であるかにかかわらず、誰もが自分のプロフィール情報を編集することを阻止します。用途を作成および編集する能力を持つ人々は、それでも可能ですが、自分自身を変更することはできません。

5
Brady

これをさらに一歩進めて、管理者以外のすべてのユーザー(投稿者、編集者など)にこれを適用することを検討している人にはうってつけの答えです。

// ===== remove edit profile link from admin bar and side menu and kill profile page if not an admin
if( !current_user_can('activate_plugins') ) {
function mytheme_admin_bar_render() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu('edit-profile', 'user-actions');
}
add_action( 'wp_before_admin_bar_render', 'mytheme_admin_bar_render' );

function stop_access_profile() {
    if(IS_PROFILE_PAGE === true) {
        wp_die( 'Please contact your administrator to have your profile information changed.' );
    }
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
}
add_action( 'admin_init', 'stop_access_profile' );
}
7
sirG

(MU-)プラグインとしての解決策

私は提供されたすべての解決策をチェックし、それから私は素晴らしいMUプラグインを作ることができると思いました。唯一の本当の変化はそれが避けるということです。

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: Disable profile page link
 * Description: Remove edit profile link from admin bar and side menu and kill profile page if user isn't an administrator.
 */
# Version: 2012-09-15.2245

function oxo_stop_access_profile()
{
    // Remove AdminBar Link
    if ( 
        'wp_before_admin_bar_render' === current_filter()
        AND ! current_user_can( 'manage_options' )
    )
        return $GLOBALS['wp_admin_bar']->remove_menu( 'edit-profile', 'user-actions' );

    // Remove (sub)menu items
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );

    // Deny access to the profile page and redirect upon try
    if ( 
        defined( 'IS_PROFILE_PAGE' )
        AND IS_PROFILE_PAGE
        AND ! current_user_can( 'manage_options' )
        )
    {
        wp_redirect( admin_url() );
        exit;
    }
}
add_action( 'wp_before_admin_bar_render', 'oxo_stop_access_profile' );
add_action( 'admin_menu', 'oxo_stop_access_profile' );
5
kaiser

上記のすべての解決策は、定数IS_PROFILE_PAGEを使用します。

if( IS_PROFILE_PAGE === true ) {

しかし、wordpress debugがtrueに設定されていると、 "undefined constant"エラーが発生します。修正するには:

if( defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true ){
........................
}
2
sudip
add_action( 'admin_menu', 'prefix_disable_profile_access' );
function prefix_disable_profile_access() {
    if( ! current_user_can('editor') || ! current_user_can('administrator') ) { // You can add the user roles who can edit their profiles here.
        remove_menu_page( 'profile.php' );
        remove_submenu_page( 'users.php', 'profile.php' );
        if ( true === IS_PROFILE_PAGE ) {
            wp_die( 'You are not permitted to change your own profile information. Please contact a member of HR to have your profile information changed.' );
        }
    }
}

これが助けになることを願っています。

0