Come reindirizzare gli utenti non amministratori alla homepage se cercano di accedere a mysite.com/wp-admin/?
Voglio che tutti i miei utenti (compresi collaboratori e autori) eccetto l'amministratore vengano reindirizzati alla homepage se cercano di accedere a mysite.com/wp-admin/. Collaboratori e autori devono comunque poter aggiungere e modificare i post come al solito, mentre tutti gli altri devono essere forzatamente reindirizzati... Ho già rimosso il link alla dashboard... Ho anche provato alcuni plugin ma quello che si avvicina di più (Remove Dashboard Access) reindirizza alla pagina principale ma impedisce ai collaboratori e autori di aggiungere, modificare e cancellare i post. Grazie!

Utilizzo questo codice da un po' di tempo, penso che originariamente provenisse da un plugin chiamato wp block admin, ma questo funziona. Devi solo modificare la capacità richiesta in modo che faccia ciò di cui hai bisogno, guarda questo
$required_capability = 'edit_others_posts';
$redirect_to = '';
function no_admin_init() {
// Abbiamo bisogno delle variabili di configurazione all'interno della funzione
global $required_capability, $redirect_to;
// È l'interfaccia di amministrazione?
if (
// Cerca la presenza di /wp-admin/ nell'URL
stripos($_SERVER['REQUEST_URI'],'/wp-admin/') !== false
&&
// Permette le chiamate a async-upload.php
stripos($_SERVER['REQUEST_URI'],'async-upload.php') == false
&&
// Permette le chiamate a admin-ajax.php
stripos($_SERVER['REQUEST_URI'],'admin-ajax.php') == false
) {
// L'utente corrente non ha il livello di capacità richiesto?
if (!current_user_can($required_capability)) {
if ($redirect_to == '') { $redirect_to = get_option('home'); }
// Invia un reindirizzamento temporaneo
wp_redirect($redirect_to,302);
}
}
}
// Aggiunge l'azione con priorità massima
add_action('init','no_admin_init',0);

Un'aggiunta: VERIFICA SEMPRE se c'è un utente connesso altrimenti impedirai la visualizzazione di elementi protetti nella schermata di login:
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' );
Grazie mille per aver offerto questa soluzione :-)

Ci sono solo due cose che devi verificare:
- Se l'utente si trova nell'interfaccia di amministrazione
- Se ha o meno le capacità necessarie
Finché utilizziamo l'hook template_redirect
non dobbiamo controllare le pagine di login/registrazione/password perché il reindirizzamento avverrà in modo invisibile per l'utente.
Ecco l'idea racchiusa in un piccolo plugin (mu-plugin).
<?php
/**
* Plugin Name: (#90535) Reindirizza gli utenti non amministratori alla pagina "Home".
* Description: Verifica se siamo nell'interfaccia di amministrazione e se l'utente ha la capacità 'manage_options' riservata agli amministratori
* Version: 2013.03.12
* Author: 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 ) );
}

Non sono sicuro di cosa stesse cercando esattamente OP, ma ora mi chiedo quando is_admin()
è vero all'interno di template_redirect
? (Forse è semplicemente troppo presto al mattino per me per vederlo ;-)

Sfortunatamente nessuno dei codici sopra ha funzionato per me, in quanto reindirizzavano semplicemente i non amministratori alla homepage anche se volevo che autori e collaboratori potessero aggiungere/modificare ed eliminare i loro articoli...
Alla fine ho rimosso i box nella dashboard e ho risolto (parzialmente) il mio problema.
Ho aggiunto questo in 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, sembra che entrambi abbiamo frainteso la tua domanda... Prendi le nostre risposte, modificale e poi riprova. Oppure rendi la tua domanda più chiara specificando A) dove dovrebbero reindirizzare login/registrazione/password e B) a quale pagina esatta l'utente dovrebbe avere accesso e a quale no.

So che questa è ancora una vecchia domanda ma puoi dare un'occhiata.
function redirect_non_admin_user(){
// Reindirizza gli utenti non amministratori dalla dashboard
if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
wp_redirect( site_url() ); exit;
}
}
// Aggiunge l'azione al hook admin_init
add_action( 'admin_init', 'redirect_non_admin_user' );
Questo controllo è MOLTO IMPORTANTE "!defined( 'DOING_AJAX' )" quando usi chiamate AJAX admin nel frontend.
