Impedire agli utenti di modificare le proprie informazioni del profilo
Sto sviluppando una intranet e sto utilizzando il plugin Members di Justin Tadlock per controllare ruoli e autorizzazioni.
Ho creato un ruolo HR
per consentire al personale delle Risorse Umane di creare e modificare gli account utente. A tutto il personale creato in WP viene assegnato il ruolo di contributor
con alcuni membri selezionati del personale a cui vengono assegnati i ruoli di editor
e administrator
.
Quello che voglio è impedire al personale di accedere e modificare le proprie informazioni del profilo. Solo il personale con ruolo HR
dovrebbe essere in grado di modificare le informazioni del profilo.

ottima risposta, per andare ancora oltre e per chiunque desideri applicare questo a tutti gli utenti non amministratori (ad esempio collaboratori, editor, ecc.)
// ===== rimuovi il link di modifica profilo dalla barra di amministrazione e dal menu laterale e disabilita la pagina del profilo se non si è amministratori
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( 'Si prega di contattare l\'amministratore per modificare le informazioni del profilo.' );
}
remove_menu_page( 'profile.php' );
remove_submenu_page( 'users.php', 'profile.php' );
}
add_action( 'admin_init', 'stop_access_profile' );
}

Ho risolto con un po' di tempo. Ecco il codice che sto utilizzando:
<?php
/*
Plugin Name: Restrict User Editing Own Profile
Plugin URI: http://www.philosophydesign.com
Description: Limita gli utenti dalla modifica delle proprie informazioni del profilo.
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( 'Non sei autorizzato a modificare le informazioni del tuo profilo. Contatta un membro delle Risorse Umane per modificare le tue informazioni.' );
}
}
?>
Il codice sopra impedisce a chiunque di modificare le proprie informazioni del profilo, indipendentemente da chi siano. Le persone che hanno la capacità di creare e modificare gli utenti possono ancora farlo, ma non possono alterare il proprio profilo.

Soluzione come Plugin (MU-Plugin)
Ho verificato tutte le soluzioni fornite e ho pensato di poter creare un bel MU-Plugin a partire da esse. L'unica modifica sostanziale è che evita
<?php
! defined( 'ABSPATH' ) AND exit;
/**
* Plugin Name: Disabilita link pagina profilo
* Description: Rimuovi il link di modifica profilo dalla barra di amministrazione e dal menu laterale e blocca l'accesso alla pagina profilo se l'utente non è un amministratore.
*/
# Version: 2012-09-15.2245
function oxo_stop_access_profile()
{
// Rimuovi il link dalla AdminBar
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' );
// Rimuovi le voci (sotto)menu
remove_menu_page( 'profile.php' );
remove_submenu_page( 'users.php', 'profile.php' );
// Nega l'accesso alla pagina profilo e reindirizza in caso di tentativo
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' );

Tutte le soluzioni sopra utilizzano la costante: IS_PROFILE_PAGE
if( IS_PROFILE_PAGE === true ) {
Ma, se il debug di WordPress è impostato su true, genererà un errore "costante non definita". Per risolverlo:
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') ) { // Puoi aggiungere qui i ruoli utente che possono modificare i propri profili.
remove_menu_page( 'profile.php' );
remove_submenu_page( 'users.php', 'profile.php' );
if ( true === IS_PROFILE_PAGE ) {
wp_die( 'Non sei autorizzato a modificare le informazioni del tuo profilo. Contatta un membro delle Risorse Umane per modificare le informazioni del tuo profilo.' );
}
}
}
Spero che questo aiuti qualcuno.

Ho avuto lo stesso problema e ho trovato un modo per disabilitare la modifica a tutti gli utenti non amministratori. Ecco come si presenta:
add_action('admin_init', 'disable_profile_edit_for_non_admins');
function disable_profile_edit_for_non_admins() {
$user = wp_get_current_user();
if (in_array('subscriber', $user->roles)) {
add_action('init', function() {
remove_action('admin_color_scheme_picker', 'admin_color_scheme_picker');
});
add_action('admin_init', function() {
if (isset($_GET['action']) && $_GET['action'] == 'profile') {
wp_die('Non sei autorizzato a modificare il tuo profilo.');
}
});
add_filter('user_has_cap', function($allcaps, $cap, $args) {
if ($cap[0] == 'edit_user' && $cap[1] == $args[0]->ID) {
$allcaps['edit_user'] = false;
}
return $allcaps;
}, 10, 3);
}
}

Utilizzo il plugin Remove Dashboard Access per questo.
