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.
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It only takes a minute to sign up.
Sign up to join this communityI 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.
wp_enqueue_script()
instead.
"user_" . $user_login . "_just_logged_in"
(since the existence of the transient indicates that the user has only just logged in, and it should get deleted as the next page loads)
Sep 16, 2021 at 15:09
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.
admin_notices
hook. If you need it after an redirect, you maybe need to do it with Cookies and a$_SESSION
.