I use form to send POST request to a page and to login user with wp_signon()
in order to authenticate user to my wordpress installation as described in WP documentation:
$creds = array();
$creds['user_login'] = $_POST["user-login"];
$creds['user_password'] = $_POST["user-password"];
$creds['remember'] = true;
$user = wp_signon( $creds, false );
After this little piece of code I’m checking if user was logged in:
if ( is_user_logged_in() ) { echo "SUCCESS"; } else { echo "FAIL!"; }
But I got FAIL!
all the time. Then after sniffing around I found this little trick:
wp_set_current_user( $user );
if ( is_user_logged_in() ) { echo "SUCCESS"; } else { echo "FAIL!"; }
I’ve got SUCCESS
on this one but when I leave this page I got FAIL
again and again.
Can anyone explain me how to login user with wp_signon()
without logging her out after page is changed or reloaded or whatever.
I’ve got desirable result when I go to /wp_admin
and login with WP’s default login form. I can navigate through every page of my WP site remaining logged-in all the time. But when I try to do this outside the default form I FAIL
.
Guide me! PLEASE!
finally this is working for me on my local WP installation after replacing – with _ from input attribute name and using full php start tags
<?php
instead of<?
the final code is here copy and paste into your template.If your password includes the # and/or @ characters, you need to urlencode before sending in the form, and then urldecode before setting the credentials in wp_signon.
The url encoding for @ is %40, # is %23 and ! is %21
if your password is mY!p@ssWord# then should be URL encoded before POSTING to mY%21p%40ssWord%23, then URL decoded before setting the credentials for wp_signon