The wp_login WordPress PHP action fires after a user has successfully logged in, allowing you to execute custom code upon user login.
Usage
function your_function($user_login, $user) { // your custom code here } add_action('wp_login', 'your_function', 10, 2);
Parameters
- $user_login (string): The username of the logged-in user.
- $user (WP_User): The WP_User object of the logged-in user.
More information
See WordPress Developer Resources: wp_login
Examples
Redirecting user to a custom page after login
Redirects the user to a custom page after logging in.
function redirect_after_login($user_login, $user) { // Redirect to custom page wp_redirect('https://example.com/custom-page'); exit; } add_action('wp_login', 'redirect_after_login', 10, 2);
Log user login events
Log user login events for later analysis.
function log_user_login($user_login, $user) { // Log login event error_log("User $user_login logged in at " . current_time('mysql')); } add_action('wp_login', 'log_user_login', 10, 2);
Send a welcome email after login
Sends a welcome email to the user upon their first login.
function send_welcome_email($user_login, $user) { // Check if user meta 'welcome_email_sent' is not set if (!get_user_meta($user->ID, 'welcome_email_sent', true)) { // Send welcome email wp_mail($user->user_email, 'Welcome to our website!', 'Thank you for joining us!'); // Update user meta to avoid sending email again update_user_meta($user->ID, 'welcome_email_sent', true); } } add_action('wp_login', 'send_welcome_email', 10, 2);
Show a custom admin notice after login
Displays a custom admin notice for the user after they log in.
function display_custom_admin_notice($user_login, $user) { // Set a transient to show the custom admin notice set_transient("custom_admin_notice_$user_login", true, 60); } add_action('wp_login', 'display_custom_admin_notice', 10, 2); function show_custom_admin_notice() { // Check if the transient is set and show the notice if (get_transient("custom_admin_notice_" . wp_get_current_user()->user_login)) { echo '<div class="notice notice-success is-dismissible"><p>Welcome back!</p></div>'; // Delete the transient after showing the notice delete_transient("custom_admin_notice_" . wp_get_current_user()->user_login); } } add_action('admin_notices', 'show_custom_admin_notice');
Limit login attempts
Limit the number of login attempts for a user in a certain time frame.
In this example, we limit the number of login attempts for a user to 5. If the user exceeds this limit, they will be logged out and asked to try again later. The login attempts count will reset after 1 hour.
function limit_login_attempts($user_login, $user) { // Get login attempts count $login_attempts = (int) get_user_meta($user->ID, 'login_attempts', true); // If attempts exceed limit, log out the user and reset the count if ($login_attempts >= 5) { wp_logout(); update_user_meta($user->ID, 'login_attempts', 0); wp_die('You have exceeded the allowed login attempts. Please try again later.'); } else { // Increase login attemptscount and update user meta $login_attempts++; update_user_meta($user->ID, 'login_attempts', $login_attempts); // Reset login attempts count after a certain time (e.g., 1 hour) wp_schedule_single_event(time() + 3600, 'reset_login_attempts', array($user->ID)); } } add_action('wp_login', 'limit_login_attempts', 10, 2); function reset_login_attempts($user_id) { // Reset login attempts count update_user_meta($user_id, 'login_attempts', 0); } add_action('reset_login_attempts', 'reset_login_attempts', 10, 1);