1

The login form on the page wp-login.php has a link at the bottom that says "Back to website-name" This link always redirects to the home page I would like it to redirect to the page the user has come from.

I imagine this requires a hook added to functions.php but I'm not sure how and could not find anything while searching.

Any ideas?

3 Answers 3

2

You can achieve that using Javascript and login_footer action hook to change the href attribute of the Back to link:

<?php

add_action('login_footer', 'ad_login_footer');

function ad_login_footer() {
    $ref = wp_get_referer();
    if ($ref) :
?>
<script type="text/javascript">
    jQuery(document).ready(function($){
        $("p#backtoblog a").attr("href", '<?php echo esc_js($ref); ?>');
    });
</script>
<?php
    endif;
}

?>

Edit:

Thanks to @brasofilo answer, you might need to load jQuery in wp-login.php. It might be loaded already by your theme or another plugin, so you have to check. To load jQuery in order to use the above code:

add_action('login_head', 'jquery_for_wp_login');

function jquery_for_wp_login() {
    wp_print_scripts(array('jquery'));
}
6
  • It didn't work but you taught me something new, thanks. It still redirects to homepage even when I came from a single post.
    – stemie
    Commented Jan 18, 2013 at 14:22
  • @user1515699 Maybe that is because jQuery is not loaded on the wp-login page as brasofilo noted in his answer, I have tested the code with WP 3.4.2 and and WP 3.5 and it worked. In your case maybe you need to load jQuery library in wp-login.php page. Please see my update.
    – Ahmad M
    Commented Jan 18, 2013 at 14:53
  • It works, nice one :)
    – stemie
    Commented Jan 19, 2013 at 12:30
  • I don't know if the situation was the same when this answer was written, but now wp_enqueue_scripts should be used instead of wp_print_scripts Commented Mar 4, 2016 at 10:48
  • I don't think I'm allowed to edit the answer, but for future reference it would be better to have this: wp_enqueue_script( 'jquery' ); Commented Mar 4, 2016 at 10:51
1

That link don't have any hook that allows modifying it directly.

It has to be done with Javascript, and, as the login page doesn't load jQuery by default (at least, that's what's happening in my test environment), I've searched for a pure JS solution.

So, this code hooks into login_footer action and prints a JS script that will change the link to history.go(-1);.

add_action( 'login_footer', 'change_back_to_blog_wpse_82152' );

function change_back_to_blog_wpse_82152()
{
    ?>
    <script type="text/javascript">
        function init() {
          // quit if this function has already been called
          if (arguments.callee.done) return;

          // flag this function so we don't do the same thing twice
          arguments.callee.done = true;

          // kill the timer
          if (_timer) clearInterval(_timer);

          // CHANGE THE LINK
          document.
              getElementById('backtoblog').
              getElementsByTagName('a')[0].
              href = 'javascript:history.go(-1);';
        };

        /* for Mozilla/Opera9 */
        if (document.addEventListener) {
          document.addEventListener("DOMContentLoaded", init, false);
        }

        /* for Internet Explorer */
        /*@cc_on @*/
        /*@if (@_win32)
          document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
          var script = document.getElementById("__ie_onload");
          script.onreadystatechange = function() {
            if (this.readyState == "complete") {
              init(); // call the onload handler
            }
          };
        /*@end @*/

        /* for Safari */
        if (/WebKit/i.test(navigator.userAgent)) { // sniff
          var _timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) {
              init(); // call the onload handler
            }
          }, 10);
        }

        /* for other browsers */
        window.onload = init;
    </script>
    <?php
}
1

If you're looking for a PHP solution, I'd go for this:

  • There is no specific hook/action/filter you can make use of for that link.
  • However, there is the general home_url filter in action on that login page.

What you can do is to take a fingerprint of hook functions that are called on that page, check the requested page and create a conditional filtering that is filtering the home_url value only in this specific scenario.

Wrap it up nicely in a plugin of it's own and keep it in the must-use plugin folder for example. Prevents you from hacking core (e.g. if you're not using any version control).

Otherwise if you're under git, just branch out, add a filter your own for that link, introduce the plugin and keep current when you need to (less hassles).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.