Cum restricționez accesul la panoul de administrare pentru anumite roluri de utilizatori?
Aș dori să împiedic anumite roluri de utilizatori să acceseze panoul de administrare http://www.openeye.net/wp-admin/. Am mutat și restilizat profilurile utilizatorilor pe o nouă pagină care poate fi vizualizată pe site. Cum aș putea face acest lucru?

Pentru a bloca accesul abonaților și colaboratorilor în administrare:
function wpse23007_redirect(){
if( is_admin() && !defined('DOING_AJAX') && ( current_user_can('subscriber') || current_user_can('contributor') ) ){
wp_redirect(home_url());
exit;
}
}
add_action('init','wpse23007_redirect');
Sper că acest lucru vă ajută. Toate rolurile oferă utilizatorului o capabilitate care este numele acelui rol, astfel încât puteți utiliza orice nume de rol ca o capabilitate.

Ah, da, este legată de paranteza suplimentară după ('DOING_AJAX')

Oh, scuze; a fost intenționat. Trebuia să fie încă una de închidere la final. Am adăugat-o în răspuns.

Există vreun motiv pentru care acest lucru nu funcționează cu tema 2011 și plugin-ul members?

Nu pare să funcționeze pe site-urile din rețea, aveți vreo idee de ce?

Pare să funcționeze pentru mine, pe o instalare standard WordPress. Mulțumesc mult :-)

// Dacă rolul utilizatorului este Abonat, acesta nu poate accesa Panoul de administrare
function wpse23007_redirect()
{
if( is_admin() && !defined('DOING_AJAX') && current_user_can('subscriber') )
{
wp_logout();
wp_redirect(home_url());
exit;
}
}
add_action('init','wpse23007_redirect');

Da, va trebui să utilizați funcția current_user_can( $capability ). Iată referința oficială WordPress: https://codex.wordpress.org/Function_Reference/current_user_can

add_action('init', function(){
$redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
$user = wp_get_current_user();
if ( !defined('DOING_AJAX') && in_array( 'subscriber', (array) $user->roles ) ) {
wp_redirect($redirect);
exit();
}
});
