У меня были настоящие проблемы ... наконец-то он заработал ... !!(после нескольких дней экспериментов и ударившись головой об это)
Одна вещь, которую нужно убедиться, это то, что вы еще не отправили вывод, или файл cookie сеанса не запишет, как это должно быть в заголовке,Также, если вы вызываете wp_signon до начала сеанса, там информация о сеансе также теряется ... блин ... странно, но у меня обоих случалось со мной.Anyhoo no more ado ...
// Создать нового пользователя (например)
$userdata = array('user_login'->$username,'user_pass'->$password);
$user_id = wp_insert_user($userdata);
// Убедитесь, что имя пользователя обновлено ... Мне нужно это, так как былперехватить user_register, вызываемый в wp_insert_user, но этот перехватчик вызывается после создания пользователя, поэтому для работы ему необходимо очистить кэш БД, в противном случае было задано неправильное имя пользователя ... Таким образом, пользователь автоматически вошел в системутолько для одной страницы - смешно.(Между прочим, это было Регистрация плюс Redux) *
wp_cache_delete($user_id, 'users');
wp_cache_delete($username, 'userlogins');
$userdata = get_userdata($user_id);
$username = $userdata->user_login;
// Убедитесь, что сессия пользователя началась
$vsessionid = session_id();
if (empty($vsessionid)) {session_name('PHPSESSID'); session_start();}
// Логин текущего пользователя
wp_clear_auth_cookie();
$creds = array();
$creds['user_login'] = $username;
$creds['user_password'] = $password;
$creds['remember'] = true;
$user = wp_signon($creds, false);
// Проверка работоспособности
if (is_wp_error($user)) {$error = $user->get_error_message();}
else {
wp_set_current_user($user_id);
// The next line *really* seemed to help!
do_action('set_current_user');
$current_user = wp_get_current_user();
if (is_wp_error($current_user)) {$error = $user->get_error_message();}
}
if ($error) {echo $error; print_r($userdata); print_r($current_user);}