Skip to content

Instantly share code, notes, and snippets.

@cliffordp
Last active September 23, 2023 06:22
Show Gist options
  • Save cliffordp/e8d1d9f732328ba360ad to your computer and use it in GitHub Desktop.
Save cliffordp/e8d1d9f732328ba360ad to your computer and use it in GitHub Desktop.
Automatically login a single WordPress user upon arrival to a specific page.
<?php
/**
* Automatically login a single WordPress user upon arrival to a specific page.
*
* Redirect to home page once logged in and prevent viewing of the login page.
* Compatible with WordPress 3.9.1+
* Updated 2014-07-18 to resolve WP_DEBUG notice: "get_userdatabylogin is deprecated since version 3.3! Use get_user_by('login') instead."
* Updated 2019-07-09 to reformat code, pass 2nd parameter to `do_action()`, and hook into priority 1.
*
* @link https://gist.github.com/cliffordp/e8d1d9f732328ba360ad This snippet.
* @link http://tourkick.com/2014/wordpress-demo-multisite-db-reset/ An article that uses this snippet.
*/
function auto_login() {
// @TODO: change these 2 items
$loginpageid = '1234'; //Page ID of your login page
$loginusername = 'demo'; //username of the WordPress user account to impersonate
// get this username's ID
$user = get_user_by( 'login', $loginusername );
// only attempt to auto-login if at www.site.com/auto-login/ (i.e. www.site.com/?p=1234 ) and a user by that username was found
if (
! is_page( $loginpageid )
|| ! $user instanceof WP_User
) {
return;
}
$user_id = $user->ID;
// login as this user
wp_set_current_user( $user_id, $loginusername );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $loginusername, $user );
// redirect to home page after logging in (i.e. don't show content of www.site.com/?p=1234 )
wp_redirect( home_url() );
exit;
}
add_action( 'wp', 'auto_login', 1 );
@gersomalisasis
Copy link

gersomalisasis commented May 8, 2022

Is this possible to have that kind of feature in a Bash script? Which bash will initiate and generate the login link for WordPress

@henryobiaraije
Copy link

#23
do_action('wp_login', $loginusername);
should be
do_action('wp_login', $loginusername, $user);

why it should be needed $user?

It is needed if you are working with woocommerce. I do get an error in woocommerce if I omit the $user.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment