Почему функция wp_signon() на wordpress не авторизирует?

Добрый день!

Использую следующий код для авторизации:
$user['user_login'] = $_POST['log'];
$user['user_password'] = $_POST['pwd'];
$user['remember'] = true;
$signon = wp_signon($user, false);
if (is_wp_error($signon)) echo $signon->get_error_message();
print_r($signon);

Если ввожу неверные данные - выводит ошибку, как положено. Если ввожу верные данные, то функция возвращает объект WP_User, как указанно в документации wordpress, но не авторизирует.
  • Вопрос задан
  • 3588 просмотров
Решения вопроса 1
nowm
@nowm
Этот код, кажется, нужно поместить внутрь функции. А саму функцию вызывать до того, как движок отправит заголовки клиенту. Вот так:

function custom_login() {
    $user['user_login'] = $_POST['log'];
    $user['user_password'] = $_POST['pwd'];
    $user['remember'] = true;
    $signon = wp_signon($user, false);
    if (is_wp_error($signon)) echo $signon->get_error_message();
    //print_r($signon);
}

add_action( 'after_setup_theme', 'custom_login' );


Потому что wp_signon ещё кажется куки какие-то создаёт в процессе. Так что она должна вызываться до момента, когда всё это отправляется клиенту. А у вас код наверняка где-нибудь прямо в шаблоне прописан, когда уже поздно вызывать wp_signon.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Run Автор вопроса
Ранее не работал с wordpress 'ом. Теперь разобрался.
Код:
function custom_login() {
    $user['user_login'] = $_POST['log'];
    $user['user_password'] = $_POST['pwd'];
    $user['remember'] = true;
    $signon = wp_signon($user, false);
    if (is_wp_error($signon)) echo $signon->get_error_message();
    //print_r($signon);
}

add_action( 'after_setup_theme', 'custom_login' );

нужно добавлять в functions.php. Всё счастье, как оказалось, в функции add_action().
Спасибо @Xu4 'у за помощь!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы