• Access & Security 95
  • Administration 172
  • Advertisement 92
  • Audio & Video 66
  • Author & Content 99
  • Comments 96
  • Communication 110
  • Communities & Forums 84
  • Development 47
  • E-Commerce 76
  • Email Management 53
  • Events & Calendars 80
  • Language 25
  • Map & Weather 44
  • Migration & Conversion 28
  • Miscellaneous 254
  • Mobile 15
  • Photos 143
  • Plugins 260
  • SEO & Site Speed 118
  • Social 186
  • Theme Enhancement 169

  • Add this plugin to a List

    You need to be logged in to add this plugin to your list.

    Peter's Login Redirect

    Add to List

    Define a set of redirect rules for specific users, users with specific roles, users with specific capabilities, and a blanket rule for all other users. Also, set a redirect URL for post-registration. This is all managed in Settings > Login/logout redirects.

    You can use the syntax [variable]username[/variable] in your URLs so that the system will build a dynamic URL upon each login, replacing that text with the user’s username. In addition to username, there is “userslug”, “homeurl”, “siteurl”, “postid-23”, “http_referer” and you can also add your own custom URL “variables”. See Other Notes / How to Extend for documentation.

    If you’re using a plugin such as Gigya that bypasses the regular WordPress login redirect process (and only allows one fixed redirect URL), set that plugin to redirect to wp-content/plugins/peters-login-redirect/wplogin_redirect_control.php and set the relevant setting to “Yes” at the bottom of the Settings > Login/Logout redirects page in the WordPress admin panel.

    You can add your own code logic before and between any of the plugin’s normal redirect checks if needed. See Other Notes / How to Extend for documentation. Some examples include: redirecting the user based on their IP address; and redirect users to a special page on first login.

    This plugin also includes a function rul_register that acts the same as the wp_register function you see in templates (typically producing the Register or Site Admin links in the sidebar), except that it will return the custom defined admin address. rul_register takes three parameters: the “before” code (by default “<li>”), the “after” code (by default “</li>”), and whether to echo or return the result (default is true and thus echo).


    • nl_NL translation by Anja of
    • sk_SK translation by Michal Miksik of
    • ro_RO translation by Anunturi Jibo of
    • cs_CZ translation by Petr MaĊĦek and Michal Kuk
    • de_DE translation by Lara of and Mario
    • es_ES translation by Closemarketing of
    • lt_LT translation by Vincent G of
    • da_DK translation by Tom of
    • id_ID translation by Syamsul Alam of
    • uk translation by Yura
    • sr_RS translation by Borisa Djuraskovic of
    • fr_FR translation by DomBonj
    • pt_BR translation by Graal4
    • ru_RU translation by Sergey

    How to Extend

    Custom redirect rules

    You can write your own code logic before any of this plugin’s checks for user-specific, role-specific, and capability-specific redirects, as well as before the fallback redirect URL.

    Available filters are:

    • rul_before_user
    • rul_before_role
    • rul_before_capability
    • rul_before_fallback

    Each takes the same 4 parameters:

    • $custom_redirect_to: This is set as false in case you don’t have any redirect URL to set. Return this instead of false in case you have multiple filters running.
    • $redirect_to: Set by WordPress, usually the admin URL.
    • $requested_redirect_to: Set by WordPress, usually an override set in a GET parameter.
    • $user: A PHP object representing the current user.

    Your return value in your own code logic should be the URL to redirect to, or $custom_redirect_to to continue the plugin’s normal checks.

    An example of plugin code to redirect users on first login. See for standalone functionality:

    // Send new users to a special page
    function redirectOnFirstLogin( $custom_redirect_to, $redirect_to, $requested_redirect_to, $user )
        // URL to redirect to
        $redirect_url = '';
        // How many times to redirect the user
        $num_redirects = 1;
        // If implementing this on an existing site, this is here so that existing users don't suddenly get the "first login" treatment
        // On a new site, you might remove this setting and the associated check
        // Alternative approach: run a script to assign the "already redirected" property to all existing users
        // Alternative approach: use a date-based check so that all registered users before a certain date are ignored
        // 172800 seconds = 48 hours
        $message_period = 172800;
            Cookie-based solution: captures users who registered within the last n hours
            The reason to set it as "last n hours" is so that if a user clears their cookies or logs in with a different browser,
            they don't get this same redirect treatment long after they're already a registered user
        $key_name = 'redirect_on_first_login_' . $user->ID;
        if( strtotime( $user->user_registered ) > ( time() - $message_period )
            && ( !isset( $_COOKIE[$key_name] ) || intval( $_COOKIE[$key_name] ) < $num_redirects )
            if( isset( $_COOKIE[$key_name] ) )
                $num_redirects = intval( $_COOKIE[$key_name] ) + 1;
            setcookie( $key_name, $num_redirects, time() + $message_period, COOKIEPATH, COOKIE_DOMAIN );
            return $redirect_url;
            User meta value-based solution, stored in the database
        $key_name = 'redirect_on_first_login';
        // Third parameter ensures that the result is a string
        $current_redirect_value = get_user_meta( $user->ID, $key_name, true );
        if( strtotime( $user->user_registered ) > ( time() - $message_period )
            && ( '' == $current_redirect_value || intval( $current_redirect_value ) < $num_redirects )
            if( '' != $current_redirect_value )
                $num_redirects = intval( $current_redirect_value ) + 1;
            update_user_meta( $user->ID, $key_name, $num_redirects );
            return $redirect_url;
            return $custom_redirect_to;
    add_filter( 'rul_before_user', 'redirectOnFirstLogin', 10, 4 );

    An example of plugin code to redirect to a specific URL for only a specific IP range as the first redirect check:

    function redirectByIP( $custom_redirect_to, $redirect_to, $requested_redirect_to, $user )
        $ip_check = '192.168.0';
        if( 0 === strpos( $_SERVER['REMOTE_ADDR'], $ip_check ) )
            return '/secret_area';
            return $custom_redirect_to;
    add_filter( 'rul_before_user', 'redirectByIP', 10, 4 );

    Note that the same extensibility is available for logout redirects with these filters:

    • rul_before_user_logout
    • rul_before_role_logout
    • rul_before_capability_logout
    • rul_before_fallback_logout

    It takes 3 parameters:

    • $custom_redirect_to: This is set as false in case you don’t have any redirect URL to set. Return this instead of false in case you have multiple filters running.
    • $requested_redirect_to: A redirect parameter set via POST or GET.
    • $user: A PHP object representing the current user.

    Custom variable parameters

    There is an available filter “rul_replace_variable” for adding your own custom variable names. For example, to replace [variable]month[/variable] in the redirect URL with the numeric representation of the current month (with leading zeros):

    function customRULVariableMonth( $custom_redirect_to, $variable, $user )
        if( 'month' == $variable )
            return date( 'm' );
            return $custom_redirect_to;
    add_filter( 'rul_replace_variable', 'customRULVariableMonth', 10, 3 );

    Be sure to rawurlencode the returned variable if necessary.

    Custom “My Portal” link

    A common need is to display the “redirect” link for a user in the site navigation or sidebar.

    Look at the function rul_register() in the plugin file for inspiration; it makes use of the redirect_to_front_page() function to determine the URL and then provides the relevant output code.

    For a deeper dive into this feature, please see this video:

    Rate This Plugin

    Please Login to Rate this Plugin!




    0 Votes
    Not Rated Yet Stats

    Last Updated438 Days ago
    Published9 years ago

    Report Wrong Category!