Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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?

share|improve this question

3 Answers 3

up vote 1 down vote accepted

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'));
}
share|improve this answer
    
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 Jan 18 '13 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 Jan 18 '13 at 14:53
    
It works, nice one :) –  stemie Jan 19 '13 at 12:30

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
}
share|improve this answer

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).

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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