PHPwordpressintermediate
WordPress Custom Login Redirect by Role
Redirect users to different pages after login based on their user role
Faisal Yaqoob
November 4, 2025
#wordpress#login#redirect#user-roles#authentication
Code
php
1 // Redirect users after login based on role 2 function custom_login_redirect($redirect_to, $request, $user) { 3 // Check if user is set and has roles 4 if (isset($user->roles) && is_array($user->roles)) { 5
6 // Administrator redirect 7 if (in_array('administrator', $user->roles)) { 8 return admin_url('index.php'); 9 } 10
11 // Editor redirect 12 if (in_array('editor', $user->roles)) { 13 return admin_url('edit.php'); 14 } 15
16 // Author redirect 17 if (in_array('author', $user->roles)) { 18 return admin_url('post-new.php'); 19 } 20
21 // Subscriber redirect (no admin access) 22 if (in_array('subscriber', $user->roles)) { 23 return home_url('/my-account/'); 24 } 25
26 // Customer redirect (WooCommerce) 27 if (in_array('customer', $user->roles)) { 28 return home_url('/shop/'); 29 } 30
31 // Custom role redirect 32 if (in_array('custom_role', $user->roles)) { 33 return home_url('/custom-dashboard/'); 34 } 35 } 36
37 // Default redirect 38 return $redirect_to; 39 } 40 add_filter('login_redirect', 'custom_login_redirect', 10, 3); 41
42 // Block admin access for subscribers 43 function block_subscriber_admin_access() { 44 if (is_admin() && !current_user_can('edit_posts') && !wp_doing_ajax()) { 45 wp_redirect(home_url('/my-account/')); 46 exit; 47 } 48 } 49 add_action('admin_init', 'block_subscriber_admin_access');
WordPress Custom Login Redirect by Role
Redirect users to specific pages after login based on their WordPress user role. Perfect for membership sites and custom user experiences.
// Redirect users after login based on role
function custom_login_redirect($redirect_to, $request, $user) {
// Check if user is set and has roles
if (isset($user->roles) && is_array($user->roles)) {
// Administrator redirect
if (in_array('administrator', $user->roles)) {
return admin_url('index.php');
}
// Editor redirect
if (in_array('editor', $user->roles)) {
return admin_url('edit.php');
}
// Author redirect
if (in_array('author', $user->roles)) {
return admin_url('post-new.php');
}
// Subscriber redirect (no admin access)
if (in_array('subscriber', $user->roles)) {
return home_url('/my-account/');
}
// Customer redirect (WooCommerce)
if (in_array('customer', $user->roles)) {
return home_url('/shop/');
}
// Custom role redirect
if (in_array('custom_role', $user->roles)) {
return home_url('/custom-dashboard/');
}
}
// Default redirect
return $redirect_to;
}
add_filter('login_redirect', 'custom_login_redirect', 10, 3);
// Block admin access for subscribers
function block_subscriber_admin_access() {
if (is_admin() && !current_user_can('edit_posts') && !wp_doing_ajax()) {
wp_redirect(home_url('/my-account/'));
exit;
}
}
add_action('admin_init', 'block_subscriber_admin_access');
Redirect After Logout
// Custom logout redirect
function custom_logout_redirect() {
wp_redirect(home_url('/goodbye/'));
exit();
}
add_action('wp_logout', 'custom_logout_redirect');
First Time Login Detection
// Redirect on first login
function first_login_redirect($redirect_to, $request, $user) {
if (isset($user->roles) && is_array($user->roles)) {
// Check if first login
$first_login = get_user_meta($user->ID, 'first_login', true);
if (empty($first_login)) {
// Mark as logged in
update_user_meta($user->ID, 'first_login', time());
// Redirect to welcome page
return home_url('/welcome/');
}
}
return $redirect_to;
}
add_filter('login_redirect', 'first_login_redirect', 10, 3);
Redirect Based on Username
// Redirect specific users to custom pages
function redirect_by_username($redirect_to, $request, $user) {
if (isset($user->user_login)) {
$username = $user->user_login;
// Specific user redirects
$user_redirects = array(
'john_doe' => '/johns-dashboard/',
'jane_smith' => '/janes-page/',
);
if (array_key_exists($username, $user_redirects)) {
return home_url($user_redirects[$username]);
}
}
return $redirect_to;
}
add_filter('login_redirect', 'redirect_by_username', 10, 3);
WooCommerce Integration
// WooCommerce my account redirect
function woocommerce_login_redirect($redirect, $user) {
if (wc_user_has_role($user, 'customer')) {
$redirect = wc_get_page_permalink('myaccount');
}
return $redirect;
}
add_filter('woocommerce_login_redirect', 'woocommerce_login_redirect', 10, 2);
Features
- Role-Based Routing: Different redirects for different user roles
- Admin Blocking: Prevent non-admin users from accessing admin
- First Login Detection: Special handling for new users
- WooCommerce Support: Integration with WooCommerce accounts
- Flexible: Easy to customize for any role or user
Related Snippets
Create Custom User Roles in WordPress
Add custom user roles with specific capabilities for your WordPress site
PHPwordpressintermediate
phpPreview
// Add custom user role on theme activation
function add_custom_user_roles() {
// Content Manager role
add_role(
...#wordpress#user-roles#capabilities+2
11/11/2025
View
WordPress Limit Login Attempts
Add brute force protection by limiting failed login attempts
PHPwordpressadvanced
phpPreview
// Limit login attempts
function limit_login_attempts() {
// Get IP address
$ip = $_SERVER['REMOTE_ADDR'];
...#wordpress#security#login+2
11/5/2025
View
WordPress Custom Breadcrumbs
Create SEO-friendly breadcrumb navigation without plugins
PHPwordpressintermediate
phpPreview
// Display breadcrumbs
function custom_breadcrumbs() {
// Settings
$separator = ' » ';
...#wordpress#breadcrumbs#navigation+2
11/15/2025
View