私は現在イントラネットを開発していて、役割と機能を制御するためにJustin TadlockのMembersプラグインを使用しています。
私は人事部のスタッフがユーザーアカウントを作成および編集できるようにするためにHR
ロールを作成しました。 WPで作成されたすべてのスタッフにcontributor
ロールが割り当てられ、選択された少数のメンバーからeditor
およびadministrator
ロールが割り当てられます。
私が欲しいのは、スタッフがログインして自分のプロフィール情報を変更しないようにすることです。プロファイル情報を編集できるのはHR
ロールのスタッフだけです。
少し時間をかけて解決しました。これが私が使っているコードです:
<?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.' );
}
}
?>
上記のコードは、自分が誰であるかにかかわらず、誰もが自分のプロフィール情報を編集することを阻止します。用途を作成および編集する能力を持つ人々は、それでも可能ですが、自分自身を変更することはできません。
これをさらに一歩進めて、管理者以外のすべてのユーザー(投稿者、編集者など)にこれを適用することを検討している人にはうってつけの答えです。
// ===== 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' );
}
私は提供されたすべての解決策をチェックし、それから私は素晴らしい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' );
上記のすべての解決策は、定数IS_PROFILE_PAGEを使用します。
if( IS_PROFILE_PAGE === true ) {
しかし、wordpress debugがtrueに設定されていると、 "undefined constant"エラーが発生します。修正するには:
if( defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true ){
........................
}
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.' );
}
}
}
これが助けになることを願っています。