Функция is_user_logged_in() не работает
Я создаю форму входа для своего сайта, и у меня есть такой раздел:
<?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 }
Независимо от того, вошел ли я в систему с помощью указанной выше формы.
С функцией всё в порядке, проблема в том, что вы на самом деле не входите в систему!
Вы говорите, что создаёте собственную форму входа? Она отправляет данные на стандартный wp-login.php
или вы обрабатываете запрос самостоятельно?
Отличается ли путь/домен формы от WordPress? Если вы проверите свои куки, устанавливаются ли какие-либо из них?

Я использую wp_login_form()
Что касается пути/домена, я не совсем уверен.
Я использую Chrome, и согласно инструменту отладки профиля, он предлагает:
Домен:localhost Путь:/ Дата:Пт, 10 Авг 2012 11:14:30 GMT Размер:70

А что касается формы, она хранится в:
http://localhost/newgameplus/TEST/scripts/php/testWP.php
А установка WordPress находится в:
http://localhost/newgameplus/wordpress/

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

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

Я знаю, что уже довольно поздно, но добавляю свой ответ, чтобы помочь другим. Если вы используете функцию 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, когда вы думали, что уже вошли в систему как пользователь.
