PHPwordpressintermediate

WordPress Custom Login Redirect by Role

Redirect users to different pages after login based on their user role

#wordpress#login#redirect#user-roles#authentication
Share this snippet:

Code

php
1// Redirect users after login based on role
2function 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}
40add_filter('login_redirect', 'custom_login_redirect', 10, 3);
41
42// Block admin access for subscribers
43function 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}
49add_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