Функция is_user_logged_in() не работает

18 июл. 2012 г., 10:35:07
Просмотры: 11.3K
Голосов: 0

Я создаю форму входа для своего сайта, и у меня есть такой раздел:

<?php
if (is_user_logged_in()) {
    echo 'Привет, ', $user_login, '. <a href="', wp_logout_url(), '" title="Выйти">Выход</a>';
} else {
    wp_login_form();
}

После входа система возвращает на страницу без каких-либо признаков авторизации.
Я подозреваю, что is_user_logged_in() не работает, но не знаю, как диагностировать эту проблему.

РЕДАКТИРОВАНО: Когда я делаю так:

global $current_user;
var_dump($current_user);

Я всегда получаю:

ect(WP_User)#3 (7) { ["data"]=> NULL ["ID"]=> int(0) ["caps"]=> array(0) { } ["cap_key"]=> NULL ["roles"]=> array(0) { } ["allcaps"]=> array(0) { } ["filter"]=> NULL }

Независимо от того, вошел ли я в систему с помощью указанной выше формы.

2
Комментарии

Отключите все плагины кэширования и кэш вашего браузера. Проблема сохраняется?

fuxia fuxia
18 июл. 2012 г. 10:49:52

Да, я попробовал очистить кэш.

Должен отметить, что я пытаюсь интегрировать WordPress в существующий сайт.

Поэтому я не хочу использовать какие-либо плагины или подобные решения.

Adola Adola
18 июл. 2012 г. 10:52:30
Все ответы на вопрос 2
4

С функцией всё в порядке, проблема в том, что вы на самом деле не входите в систему!

Вы говорите, что создаёте собственную форму входа? Она отправляет данные на стандартный wp-login.php или вы обрабатываете запрос самостоятельно?

Отличается ли путь/домен формы от WordPress? Если вы проверите свои куки, устанавливаются ли какие-либо из них?

18 июл. 2012 г. 11:04:10
Комментарии

Я использую wp_login_form()

Что касается пути/домена, я не совсем уверен.

Я использую Chrome, и согласно инструменту отладки профиля, он предлагает:

Домен:localhost Путь:/ Дата:Пт, 10 Авг 2012 11:14:30 GMT Размер:70

Adola Adola
18 июл. 2012 г. 11:08:07

А что касается формы, она хранится в:

http://localhost/newgameplus/TEST/scripts/php/testWP.php

А установка WordPress находится в:

http://localhost/newgameplus/wordpress/

Adola Adola
18 июл. 2012 г. 11:09:10

Думаю, в этом проблема - WordPress установит куки с путем /newgameplus/wordpress/, которые не будут читаться в /newgameplus/TEST/scripts/php/testWP.php. Попробуйте добавить define( 'COOKIEPATH', '/' ); в ваш wp-config.php

TheDeadMedic TheDeadMedic
18 июл. 2012 г. 11:53:35

Кстати, я настоятельно рекомендую использовать виртуальные хосты для разработки: http://wordpress.stackexchange.com/questions/32331/wordpress-local-development-environment

TheDeadMedic TheDeadMedic
18 июл. 2012 г. 11:55:43
0

Я знаю, что уже довольно поздно, но добавляю свой ответ, чтобы помочь другим. Если вы используете функцию wp_signon() для входа в систему, а затем проверяете с помощью is_user_logged_in(), вам нужно сначала установить текущего пользователя с помощью wp_set_current_user(), потому что wp_signon() не обрабатывает установку текущего пользователя, как описано в WP codex:

https://developer.wordpress.org/reference/functions/wp_signon/

Это одна из причин, почему функция is_user_logged_in() возвращает false, когда вы думали, что уже вошли в систему как пользователь.

7 февр. 2023 г. 03:22:22