<?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 );