Использование функций входа в WordPress

Кто-нибудь имеет опыт написания пользовательской страницы входа в WordPress с помощью следующих функций:

wp_signon() and wp_set_auth_cookie() 

найдено на http://codex.wordpress.org/Function_Reference/

Кажется, я не могу заставить их работать.

Код выглядит примерно так:

 function login_wordpress($username, $password) { $creds = array(); $creds['user_login'] = $username; $creds['user_password'] = $password; $creds['remember'] = true; $user = wp_signon( $creds, false ); if ( is_wp_error($user) ) { echo $user->get_error_message(); die(); } else { wp_set_auth_cookie( $user, 0, 0); } } 

Я что-то пропустил?

Вам нужно изменить эту строку:

 wp_set_auth_cookie( $user, 0, 0); 

К этому:

 wp_set_auth_cookie( $user->ID, 0, 0); 

$user – это WP_User объекта, не являющийся $user WP_User .

wp_signon возвращает WP_Error при сбое, или WP_User на успех.

У меня была настоящая проблема … наконец-то ее работала !! (после нескольких дней экспериментов и ударов головой об этом)

Одна вещь, чтобы убедиться, что вы еще не отправили какой-либо результат, или файл cookie сеанса не будет записываться, поскольку он должен находиться в заголовке. Также, если вы вызываете wp_signon до начала сеанса, информация о сеансе также теряется … sheesh … странно, но у меня обоих со мной произошло. Anyhoo больше не шутит …

// Создаем нового пользователя (например)

 $userdata = array('user_login'->$username,'user_pass'->$password); $user_id = wp_insert_user($userdata); 

// Удостоверьтесь, что имя пользователя обновлено … Мне это нужно, поскольку в wp_insert_user был вызван hook_ user_register, но этот hook вызывается после создания пользователя, поэтому ему нужно было очистить кеш БД, иначе неверное имя пользователя был установлен … Таким образом, пользователь был автоматически зарегистрирован только для одной страницы – смешно. (Это был Register Plus 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);} 
 current_user(); function current_user() { global $current_user,$user_ID; if(is_user_logged_in()) { echo 'User Logged in '.$user_ID; } else { echo 'No user is logged in< br/>'; custom_login(); } } function custom_login() { $creds = array('user_login' => '<USERNAME>', 'user_password' => '<USERPASSWORD>', 'remember' => true ); $user = wp_signon( $creds, false ); wp_set_current_user($user->ID); wp_set_auth_cookie($user->ID, true, false ); do_action( 'wp_login', '<USERNAME>' ); if ( is_wp_error($user) ) echo $user->get_error_message(); } } 

Я сделал это в проекте несколько лет назад, поэтому WordPress-код был немного другим. Но этот код работал для меня:

 // include the wordpress files necessary to run its functions include('../classpages/wp-config.php'); // this includes wp-settings.php, which includes wp-db.php, which makes the database connection include(ABSPATH . WPINC . '/pluggable-functions.php'); // use wordpress's function to create the login cookies // this creates a cookie for the username and another for the hashed password, which wordpress reauthenticates each time we call its wp_get_current_user() function wp_setcookie($user_login, $user_pass, false, '', '', $cookieuser); 

Мне вообще не пришлось использовать wp_signon, но это могло измениться.

Вы получаете сообщение об ошибке или что вы видите при запуске кода?