Cum să redirecționez utilizatorii non-administratori către pagina principală când încearcă să acceseze mysite.com/wp-admin/?
Vreau ca toți utilizatorii mei (inclusiv colaboratorii și autorii), cu excepția administratorului, să fie redirecționați către pagina principală dacă încearcă să acceseze mysite.com/wp-admin/. Colaboratorii și autorii trebuie să poată adăuga și edita postări ca de obicei, dar ceilalți utilizatori trebuie redirecționați forțat... Am eliminat deja link-ul către panoul de administrare... Am încercat și câteva plugin-uri, dar cel care s-a apropiat cel mai mult (Remove Dashboard Access) redirecționează către pagina principală, dar le blochează colaboratorilor și autorilor posibilitatea de a adăuga, edita și șterge postări. Mulțumesc!

Am folosit acest cod de ceva timp, cred că provine inițial de la un plugin numit wp block admin, dar acesta funcționează. Trebuie doar să modifici capacitatea necesară, astfel încât să facă ceea ce ai nevoie, uită-te la acest link.
$required_capability = 'edit_others_posts';
$redirect_to = '';
function no_admin_init() {
// Avem nevoie de variabilele de configurare în interiorul funcției
global $required_capability, $redirect_to;
// Este aceasta interfața de administrare?
if (
// Caută prezența /wp-admin/ în URL
stripos($_SERVER['REQUEST_URI'],'/wp-admin/') !== false
&&
// Permite apelurile către async-upload.php
stripos($_SERVER['REQUEST_URI'],'async-upload.php') == false
&&
// Permite apelurile către admin-ajax.php
stripos($_SERVER['REQUEST_URI'],'admin-ajax.php') == false
) {
// Utilizatorul curent nu are capacitatea necesară?
if (!current_user_can($required_capability)) {
if ($redirect_to == '') { $redirect_to = get_option('home'); }
// Trimite o redirecționare temporară
wp_redirect($redirect_to,302);
}
}
}
// Adaugă acțiunea cu prioritate maximă
add_action('init','no_admin_init',0);

O completare importantă: VERIFICĂ ÎNTOTDEAUNA dacă există un utilizator autentificat, altfel vei împiedica afișarea elementelor protejate pe pagina de autentificare:
function redirect_non_admin_user(){
if ( is_user_logged_in() ) {
if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
wp_redirect( site_url() ); exit;
}
}
}
add_action( 'admin_init', 'redirect_non_admin_user' );
Mulțumesc mult pentru această soluție :-)

Există doar două lucruri pe care trebuie să le verifici:
- Dacă utilizatorul se află în interfața de administrare
- Dacă are sau nu capacitatea necesară
Atâta timp cât folosim hook-ul template_redirect
, nu este necesar să verificăm paginile de autentificare/înregistrare/parolă, deoarece redirecționarea va avea loc în mod invizibil pentru utilizator.
Iată ideea încapsulată într-un mic (mu-)plugin.
<?php
/**
* Nume Plugin: (#90535) Redirecționează utilizatorii non-administratori către pagina "Acasă".
* Descriere: Verifică dacă suntem în interfața de administrare și dacă utilizatorul are capacitatea 'manage_options' rezervată administratorilor
* Versiune: 2013.03.12
* Autor: Franz Josef Kaiser
*/
add_action( 'template_redirect', 'wpse90535_admin_denied' );
function wpse90535_admin_denied()
{
is_admin()
&& ! current_user_can( 'manage_options' )
and exit( wp_redirect( home_url(), 302 ) );
}

Nu sunt sigur exact ce căuta OP, dar acum mă întreb când is_admin()
este adevărat în cadrul template_redirect
? (Poate e pur și simplu prea devreme dimineața pentru mine ca să înțeleg asta ;-)

Din păcate, niciunul dintre codurile de mai sus nu a funcționat pentru mine, deoarece doar redirecționau utilizatorii non-administratori către pagina principală, chiar dacă doream ca autorii și contributorii să poată adăuga/edita și șterge articolele lor...
Am ajuns să elimin casetele din panoul de control și am rezolvat (parțial) problema mea.
Am adăugat acest cod în functions.php
function disable_default_dashboard_widgets() {
remove_meta_box('dashboard_right_now', 'dashboard', 'core');
remove_meta_box('dashboard_recent_comments', 'dashboard', 'core');
remove_meta_box('dashboard_incoming_links', 'dashboard', 'core');
remove_meta_box('dashboard_plugins', 'dashboard', 'core');
remove_meta_box('dashboard_quick_press', 'dashboard', 'core');
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'core');
remove_meta_box('dashboard_primary', 'dashboard', 'core');
remove_meta_box('dashboard_secondary', 'dashboard', 'core');
}
add_action('admin_menu', 'disable_default_dashboard_widgets');

Oh, se pare că am înțeles greșit amândoi întrebarea ta... Ia răspunsurile noastre, modifică-le și apoi încearcă din nou. Sau fă întrebarea ta mai clară cu A) unde ar trebui să redirecționeze login/înregistrare/parola și B) la ce pagină exactă ar trebui să aibă acces utilizatorul și la care nu.

Știu că aceasta este încă o întrebare veche, dar poți arunca o privire.
function redirect_non_admin_user(){
// Redirecționează utilizatorii non-administrator către pagina principală
if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
wp_redirect( site_url() ); exit;
}
}
// Adaugă acțiunea la inițializarea admin-ului
add_action( 'admin_init', 'redirect_non_admin_user' );
Această verificare "!defined( 'DOING_AJAX' )" este FOARTE IMPORTANTĂ atunci când folosești apeluri AJAX pentru admin în frontend.
