问题描述
我正在开发一个内部网,我正在使用 Justin Tadlock 的 Members 插件来控制角色和功能。
我创建了一个 HR
角色,允许人力资源人员创建和编辑用户帐户。在 WP 中创建的所有员工都获得了 contributor
角色,并为 editor
和 administrator
角色提供了一些选定的员工。
我想要的是阻止员工登录和更改自己的个人资料信息。只有 HR
角色的工作人员才能编辑个人资料信息。
最佳解决办法
非常好的答案,让我们进一步了解,任何人都希望将其应用于所有 non-admin 用户 (例如,贡献者,编辑者等)
// ===== 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' );
}
次佳解决办法
用一点时间做好了。这是我正在使用的代码:
<?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.' );
}
}
?>
上述代码阻止任何人编辑自己的个人资料信息,尽管他们是谁。有能力创建和编辑用途的人仍然可以这样做,但不能改变自己的。
第三种解决办法
解决方案作为 (MU-) 插件
我检查了所有提供的解决方案,并认为我可以做出一个很好的 MU-Plugin 。唯一真正的变化是它避免了
<?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 调试设置为 true,它将抛出”undefined constant” 错误。要解决这个问题 :
if(defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true){
........................
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。