If you hook wp_authenticate
on a normal form submit, you can make a quick detour to your subscribe function before you continue to authenticate.
add_action( 'wp_authenticate', 'wp_authenticate_by_email' );
function wp_authenticate_by_email( $username ) {
// check for subscribe action
$is_subscribe="yes" == $_POST[ 'subscribe' ];
// invalid username
if ( ! username_exists( $username ) ) {
// lookup as email
$user = get_user_by( 'email', $username );
if ( $user ) {
$email = $username;
$username = $user->user_login;
if ( $is_subscribe ) {
// subscribe to mailing list
do_subscribe( $email );
}
}
return;
}
// lookup user by login
$user = get_user_by( 'login', $username );
if ( $user ) {
// get email from user login
$email = $user->user_email;
if ( $is_subscribe ) {
// subscribe to mailing list
do_subscribe( $email );
}
}
}
function do_subscribe( $email ) {
if ( empty( $email ) ) {
return;
}
// maybe check for password ????
// do subscribe actions
sleep( 2 );
}