Как отображать сообщения об ошибках с помощью класса WP_Error?

4 февр. 2013 г., 06:53:47
Просмотры: 28.6K
Голосов: 3

У меня есть код формы регистрации в файле functions.php, который выглядит так:

if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['action']) && $_POST['action'] == 'registration') {
       $error = new WP_Error();
        if (empty(esc_attr($_POST['email'])))
        {
            $error->add('regerror','Электронная почта обязательна.');
        }
        if (!is_email(esc_attr($_POST['email'])))
        {
            $error->add('regerror','Неверный формат электронной почты.');

        }
        if (email_exists(esc_attr($_POST['email'])))
        {
            $error->add('regerror','Этот email уже используется. Забыли пароль? Если да, нажмите здесь для сброса.');

        }
}

Может ли кто-нибудь подсказать, как отобразить эти сообщения об ошибках на моей странице регистрации?

Обновление:

Моя страница регистрации содержит такой код:

<form method="post" action="<?php the_permalink(); ?>">
<!-- здесь идут поля формы -->
<input name="action" type="hidden" value="registration" />
<input type="submit" id="submit" value="Регистрация">
</form>
2
Комментарии

Это всё? Наверняка есть ещё код? Должно быть, это в функции, верно? К чему-то подключено? Вызывается напрямую? Что?

s_ha_dum s_ha_dum
4 февр. 2013 г. 07:16:23

@s_ha_dum Пожалуйста, проверьте моё обновление. Это не функция. Мой цикл if проверяет параметр action. Если action == registration, то код будет выполнен. Он ни к чему не подключён. И да, у меня есть дополнительный код в моём цикле if. Я просто сократил его, чтобы упростить вопрос.

PrivateUser PrivateUser
4 февр. 2013 г. 07:24:49
Все ответы на вопрос 1
1

Если добавить это в functions.php, вам, вероятно, придется объявить $error как global следующим образом:

if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['action']) && $_POST['action'] == 'registration') {
    global $error;
    $error = new WP_Error();
    // остальная часть вашего кода

А затем снова использовать global $error; на странице регистрации перед попыткой его использования.

Но я не понимаю, зачем вам этот код в functions.php. Это кажется плохой практикой. Вы выполняете это условие if каждый раз при загрузке любой страницы, а судя по всему, оно нужно только на странице регистрации, которую, как я предполагаю, вы написали сами, а не встроенную страницу регистрации/входа по адресу wp-login.php. Если это так, просто перенесите этот код на страницу регистрации, и он будет доступен без лишних сложностей. WP_Error имеет методы, которые позволят вам получить доступ к данным.

4 февр. 2013 г. 07:40:15
Комментарии

Спасибо. Я перенесу код на страницу регистрации, как вы посоветовали.

PrivateUser PrivateUser
4 февр. 2013 г. 07:57:04