După autentificare, redirecționarea utilizatorului în funcție de rol către o pagină specifică
Încerc să creez un hook care, atunci când un utilizator se autentifică, verifică rolul utilizatorului.. dacă rolul utilizatorului este jsa_contributor
atunci îl redirecționează către o pagină specifică. Dar se pare că codul meu nu funcționează.
Acesta este codul..
function my_login_redirect($login) {
// Preia setările de 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)); /* Redirecționează browser-ul */
exit();
}
}
add_action('wp_login', 'my_login_redirect', 99);
Are cineva vreo idee despre această problemă? Mulțumesc anticipat...

OK, deci prima ta problemă este că $current_user->roles
este un array și nu un string, așa că condiția ta nu va fi adevărată ;)
O altă preocupare a mea ar fi hook-ul pe care îl folosești. Unele plugin-uri îl pot folosi pentru alte scopuri, iar oprirea scriptului poate fi dăunătoare. Și... există un hook mult mai bun pentru asta ;)
Prima soluție: folosind hook-ul login_redirect
function my_login_redirect( $redirect_to, $request, $user ) {
// există un utilizator de verificat?
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'jsa_contributor', $user->roles ) ) {
// redirecționează-i către locația implicită
$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 );
Dar trebuie să ții minte că acest cod va redirecționa utilizatorii doar după autentificare. Nu va restricționa accesul utilizatorilor la wp-admin.
Dacă acești utilizatori nu ar trebui să aibă acces la wp-admin, atunci ar trebui să folosești o altă metodă...
A doua soluție: restricționarea accesului la 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' );

acesta poate fi răspunsul selectat, dar reprezintă o problemă de securitate... un utilizator poate accesa în continuare alte pagini după ce s-a autentificat.

@SagiveSEO ai citit întregul răspuns? Mai ales a doua parte, unde scriu exact despre această problemă și a doua funcție (folosind admin_init) se asigură că utilizatorii neautorizați nu vor putea accesa nicio parte din backend? Pentru că nu - dacă folosești întregul răspuns, o astfel de problemă nu există.

Alternativ, poți folosi woocommerce_login_redirect
dacă ai WooCommerce.
apply_filters( 'woocommerce_login_redirect', $redirect, $user );
Poți adăuga redirecționare bazate pe roluri folosind un filtru astfel:
if( !function_exists('wc_custom_user_redirect') ) {
function wc_custom_user_redirect( $redirect, $user ) {
// Obține primul rol din toate rolurile asignate utilizatorului
$role = $user->roles[0];
$dashboard = admin_url();
if( $role == 'administrator' ) {
// Redirecționează administratorii către panoul de administrare
$redirect = $dashboard;
} elseif ( $role == 'shop-manager' ) {
// Redirecționează managerii de magazin către panoul de administrare
$redirect = $dashboard;
} elseif ( $role == 'editor' ) {
// Redirecționează editorii către panoul de administrare
$redirect = $dashboard;
} elseif ( $role == 'author' ) {
// Redirecționează autorii către panoul de administrare
$redirect = $dashboard;
} elseif ( $role == 'customer' || $role == 'subscriber' ) {
// Redirecționează clienții și abonații către pagina "Contul meu"
$redirect = get_permalink( wc_get_page_id( 'myaccount' ) );
} elseif ( $role == 'jsa_contributor' ) {
// Redirecționează colaboratorii JSA către pagina "Panou colaborator 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' ) {
// Redirecționează membrii JSA către pagina "Panou membru JSA"
if( get_option('jsa_member_dashboard_page_id') ) {
$redirect = get_permalink( get_option('jsa_member_dashboard_page_id') );
} else {
$redirect = home_url();
};
} else {
// Redirecționează orice alt rol către pagina vizitată anterior sau, dacă nu este disponibilă, către pagina principală
$redirect = wp_get_referer() ? wp_get_referer() : home_url();
}
return $redirect;
}
}
add_filter( 'woocommerce_login_redirect', 'wc_custom_user_redirect', 10, 2 );

Referință: Redirecționare după autentificare în funcție de rolurile utilizatorilor în WordPress
/*@ Redirecționare după autentificare în funcție de rolurile utilizatorilor */
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;
