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.

After using the wp_login hook, is it possible to add a snippet of javascript code to the page seen immediately after the login in wordpress?

I want to use this top implement a notification system that notifies the user when they login.

share|improve this question
1  
Search for admin_notices hook. If you need it after an redirect, you maybe need to do it with Cookies and a $_SESSION. –  kaiser Jan 9 '12 at 1:09
add comment

2 Answers 2

The typical method to store pending action in WordPress is to set short-lived transient (set_transient()). Since this would need to distinguish between users you can incorporate user info as part of transient key or use different storage API, such as user option (update_user_option()), instead.

share|improve this answer
add comment

I would do something like this:

function wpse38285_wp_login( $user_login ) {
    set_transient( $user_login, '1', 0 );
}
add_action( 'wp_login', 'wpse38285_wp_login' );

function wpse38285_wp_footer() {
    global $current_user;
    get_currentuserinfo();

    if ( ! is_user_logged_in() )
        return;

    if ( ! get_transient( $current_user->user_login ) )
        return;

    $js = <<<JS
    <script type="text/javascript">
        jQuery('<div />')
            .html('<p>You are now logged in as <strong>$current_user->user_login</strong><br /><small>(click to close)</small></p>')
            .css({
                'width': '300px',
                'position': 'absolute',
                'left': '50%',
                'marginLeft': '-160px',
                'top': '100px',
                'backgroundColor': '#cdcdcd',
                'textAlign': 'center',
                'padding': '10px'
            })
            .appendTo('body')
            .on('click', function() { jQuery(this).remove(); } );
    </script>
JS;
    echo $js;
    delete_transient( $current_user->user_login );
}
add_action( 'wp_footer', 'wpse38285_wp_footer' );

Set a never-expiring transient for the user after logging on. If a transient is set for that user, inject some JavaScript code and delete the transient.

share|improve this answer
2  
Injecting JS straight into the page is not the WordPress Way. Use wp_enqueue_script() instead. –  Pat J May 29 '13 at 4:35
    
You should add a prefix to the transient name to prevent potential clashes –  Tom J Nowell Jun 25 at 9:07
add comment

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.