Я хочу иметь возможность создавать собственные ошибки входа в систему.
Например, если пользователь посещает зону с ограниченным доступом, не войдя в систему, я перенаправляюсь туда, wp-login.php?ref=access
и я хотел бы вывести Restricted area, please login to continue.
или что-то подобное.
Есть идеи как это сделать. Я обнаружил, что есть фильтры, login_errors
но я не могу найти больше нигде в коде, который появляется, кроме как на самой странице входа.
Наконец, я действительно не хочу менять какие-либо файлы ядра, чтобы сделать это. Я потратил много времени и энергии, пытаясь убедиться, что ядро WordPress полностью нетронуто, чтобы я мог его обновить.
У кого-нибудь есть идеи?
Спасибо
Том
Из быстрого взгляда на код экрана входа в систему (ой):
о, блестяще. 🙂 Спасибо. Как, черт возьми, ты это понял?! :p Большое спасибо.
@Thomas Clayson смотрите код
login_header()
функции. Он ожидает, что будет передана ошибка (что, вероятно, потребует от вас добавления и обработки пользовательского действия, беспорядочно), но он также проверяет эту глобальную$error
переменную, которую, как вы видите, тривиально изменить. 🙂Пожалуйста, взгляните на решение @Meitar ниже, которое намного чище.
Краткое обновление. Начиная с WordPress версии 3.6, использование глобальной переменной, как предлагает Рарст, очень беспорядочно, и оно затирает любые другие сообщения об ошибках ядра, плагина или темы, хранящиеся в этой переменной.
Глобальная
error
переменная, на которую ссылается Rarst, на самом деле являетсяWP_Error
объектом, который сам отвечает за сопоставление ошибок из различных событий в жизненном цикле вызовов WordPress. Поэтому, пожалуйста, не затирайте его значения, это очень усложняет отладку.Вместо этого используйте
wp_login_errors
фильтр (неlogin_errors
) иadd()
ошибки там. Так:( ПРИМЕЧАНИЕ. Это не совсем отвечает на ваш вопрос.)
Если я не ошибаюсь,
login_errors
фильтр, о котором вы говорите, предназначен для отображения сообщения при вводе неправильного имени пользователя/пароля.Итак, по умолчанию вам будет отображаться это, когда вы вводите неправильное имя пользователя:
И это для неправильного пароля:
Дело в том, что вы можете использовать
login_errors
фильтр для отображения пользовательского сообщения:Как правило, используется в качестве меры безопасности (через неясность?), Чтобы злоумышленник не знал, ввел ли он неправильное имя пользователя или неправильный пароль.