Dopo il login reindirizzare l'utente in base al ruolo su una pagina specifica
Sto cercando di creare un hook che quando un utente effettua il login, controlli il ruolo dell'utente... se il ruolo è jsa_contributor
allora reindirizzi su una pagina specifica. Ma sembra che il mio codice non funzioni.
Questo è il codice...
function my_login_redirect($login) {
$data_login = get_option('axl_jsa_login_wid_setup');
$redirect_page = $data_login[0];
$logout_redirect_page = $data_login[1];
$current_user = get_user_by('login',$login);
if($current_user->roles == 'jsa_contributor'){
wp_redirect(get_permalink($redirect_page)); /* Reindirizza il browser */
exit();
}
}
add_action('wp_login', 'my_login_redirect', 99);
Qualcuno ha un'idea su questo? Grazie in anticipo...

OK, quindi il tuo primo problema è che $current_user->roles
è un array e non una stringa, quindi la tua condizione non sarà vera ;)
Un'altra mia preoccupazione sarebbe l'hook che stai usando. Alcuni plugin potrebbero usarlo per altri scopi, e terminare lo script potrebbe essere dannoso. E... c'è un hook molto migliore per questo ;)
Prima soluzione: usando l'hook login_redirect
function my_login_redirect( $redirect_to, $request, $user ) {
//c'è un utente da controllare?
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'jsa_contributor', $user->roles ) ) {
// reindirizzali alla posizione predefinita
$data_login = get_option('axl_jsa_login_wid_setup');
return get_permalink($data_login[0]);
} else {
return home_url();
}
} else {
return $redirect_to;
}
}
add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
Ma devi ricordare che questo codice reindirizzerà gli utenti solo dopo il login. Non impedirà agli utenti di accedere a wp-admin.
Se questi utenti non dovrebbero poter accedere a wp-admin, allora dovresti usare un altro metodo...
Seconda soluzione: restringere l'accesso a wp-admin
function my_restrict_wpadmin_access() {
if ( ! defined('DOING_AJAX') || ! DOING_AJAX ) {
$user = wp_get_current_user();
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array('jsa_contributor', $user->roles) ) {
$data_login = get_option('axl_jsa_login_wid_setup');
wp_redirect( get_permalink($data_login[0]) );
die;
}
}
}
}
add_action( 'admin_init', 'my_restrict_wpadmin_access' );

questa potrebbe essere la risposta selezionata, ma è un problema di sicurezza... un utente può ancora accedere ad altre pagine dopo essersi loggato.

@SagiveSEO hai letto tutta la risposta? In particolare la seconda parte, dove scrivo esattamente di quel problema e la seconda funzione (usando admin_init) assicura che gli utenti non autorizzati non possano accedere a nessuna parte del backend? Perché no - se usi tutta la risposta, questo problema non esiste.

In alternativa, puoi utilizzare il filtro woocommerce_login_redirect
se hai WooCommerce.
apply_filters( 'woocommerce_login_redirect', $redirect, $user );
Puoi aggiungere un reindirizzamento basato sui ruoli utilizzando un filtro come questo:
if( !function_exists('wc_custom_user_redirect') ) {
function wc_custom_user_redirect( $redirect, $user ) {
// Ottieni il primo ruolo assegnato all'utente
$role = $user->roles[0];
$dashboard = admin_url();
if( $role == 'administrator' ) {
// Reindirizza gli amministratori alla dashboard
$redirect = $dashboard;
} elseif ( $role == 'shop-manager' ) {
// Reindirizza i gestori del negozio alla dashboard
$redirect = $dashboard;
} elseif ( $role == 'editor' ) {
// Reindirizza gli editori alla dashboard
$redirect = $dashboard;
} elseif ( $role == 'author' ) {
// Reindirizza gli autori alla dashboard
$redirect = $dashboard;
} elseif ( $role == 'customer' || $role == 'subscriber' ) {
// Reindirizza i clienti e gli abbonati alla pagina "Il mio account"
$redirect = get_permalink( wc_get_page_id( 'myaccount' ) );
} elseif ( $role == 'jsa_contributor' ) {
// Reindirizza i collaboratori JSA alla pagina "Dashboard Collaboratore JSA"
if( get_option('jsa_contributor_dashboard_page_id') ) {
$redirect = get_permalink( get_option('jsa_contributor_dashboard_page_id') );
} else {
$redirect = home_url();
};
} elseif ( $role == 'JSA Member' ) {
// Reindirizza i membri JSA alla pagina "Dashboard Membro JSA"
if( get_option('jsa_member_dashboard_page_id') ) {
$redirect = get_permalink( get_option('jsa_member_dashboard_page_id') );
} else {
$redirect = home_url();
};
} else {
// Reindirizza qualsiasi altro ruolo alla pagina visitata precedentemente o, se non disponibile, alla home
$redirect = wp_get_referer() ? wp_get_referer() : home_url();
}
return $redirect;
}
}
add_filter( 'woocommerce_login_redirect', 'wc_custom_user_redirect', 10, 2 );

Riferimento: Reindirizzamento dopo il login in base ai ruoli utente in WordPress
/*@ Reindirizzamento dopo il login in base ai ruoli utente */
if ( !function_exists('tf_after_login_redirection_by_user_roles') ):
add_filter( 'login_redirect', 'tf_after_login_redirection_by_user_roles', 10, 3 );
function tf_after_login_redirection_by_user_roles( $redirect_to, $request, $user ) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) :
if ( in_array( 'student', $user->roles ) ) :
$page_id = 77;
return get_permalink($page_id);
elseif ( in_array( 'teacher', $user->roles ) ) :
$page_id = 78;
return get_permalink($page_id);
elseif ( in_array( 'super-user', $user->roles ) ) :
$page_id = 79;
return get_permalink($page_id);
else:
return home_url();
endif;
else:
return $redirect_to;
endif;
}
endif;
