Title: Регистрация &#8212; проблема проверки дополнительных полей
Last modified: 30.07.2016

---

# Регистрация — проблема проверки дополнительных полей

 *  Решено [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/)
 * Всем доброго времени суток!
    Делаю свою форму регистрации с дополнительными полями.
   В локалке все работает отлично. Перенесла на хостинг — не сохраняются результаты
   проверки полей. Функция check_fields вызывается, отрабатывает. Проверяла, в конце
   объект errors заполнен, но результат не сохраняется.
 *     ```
       add_action('register_post','check_fields',10,3);
   
       function check_fields($login, $email, $errors) {
   
       if ($_POST['first'] == '') {
       $errors->add('empty_realname', "<strong>Ошибка</strong>: не заполнено поле Имя");
       }
                   foreach ( _my_get_user_contactmethods() as $name => $desc ) {
                        if ($_POST[$name] == '')
                           $errors->add("empty_$name", "<strong>Ошибка</strong>: не заполнено поле $desc");
                   }
       }
       ```
   
 * Так как до этого все подключаемые мной функции либо выводили, либо напрямую возвращали
   результат, то полагаю, что дело в видимости переменных.
    Так как wordpress для
   меня пока в стадии изучения, буду рада любым советам.

Просмотр 15 ответов — с 1 по 15 (всего 16)

1 [2](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/page/2/?output_format=md)
[→](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/page/2/?output_format=md)

 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28715)
 * Еще уточню — демо с codex.wordpress.ru тоже не хочет на хостинге работать.
 *     ```
       add_action('register_post','plugin_post',10,3);
       function plugin_post($login,$email,$errors){
   
           $errors->add('demo_error',__('This is a demo error, and will halt registration'));
   
       }
       ```
   
 * Ведь наверняка мелочь какая-нибудь. В каком хотя бы направлении рыть? о_О
 *  [Yuriy Stepanov](https://ru.wordpress.org/support/users/stur/)
 * (@stur)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28716)
 * а плагин поискать не пробовали, я точно знаю есть такой
 *  Модератор [Sergey Biryukov](https://ru.wordpress.org/support/users/sergeybiryukov/)
 * (@sergeybiryukov)
 * Live and Learn
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28717)
 * Проверил оба примера локально и на хостинге — в функциях ошибок нет. Предполагаю,
   что нужно провести более глубокую отладку на сервере.
 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28719)
 * Спасибо за ответы )
    Плагин ради маленькой функции подключать не хочется.
 * > Предполагаю, что нужно провести более глубокую отладку на сервере.
 * Спасибо за проверку. А по поводу отладки не подскажете — с чего начать? Все остальное
   работает без нареканий.
 *  [Atrax](https://ru.wordpress.org/support/users/atrax/)
 * (@atrax)
 * Ethical engineer
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28733)
 * > Плагин ради маленькой функции подключать не хочется.
 * А что так?
 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28740)
 * Читала мнение, что добавление лишнего плагина влияет на скорость выдачи страниц.
   Не так?
    Сама пока не проверяла. Вернее, проверяла только в локалке, а в локалке
   у меня тормозит загрузка. В частности, подвешивала плагины Theme My Login и Theme
   My Profile. После того, как убрала Theme My Profile, стало быстрее грузиться.
   Возможно, я не права )) На хостинге пока проверить возможности не было, до сегодняшнего
   дня я там была единственным посетителем)), настраивала, поэтому нагрузку оценить
   не могла. Оптимизацией еще не занималась, планирую изучить этот вопрос. С удовольствием
   выслушаю мнения бывалых )) Среднее количество посетителей на сайте 250 человек
   в день.
 *  Модератор [Юрій](https://ru.wordpress.org/support/users/yube/)
 * (@yube)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28742)
 * > Читала мнение, что добавление лишнего плагина влияет на скорость выдачи страниц.
   > Не так?
 * Строго говоря — так. Плагин — это код. А любой код требует времени на свое выполнение.
   Не-плагин — тоже код, и тоже требует времени, правда, немного меньше. Вопрос 
   только в том, насколько критичны те наносекунды, которые требуются на специфические
   для плагинов куски кода. Если вопрос микросекунд стоит настолько остро (в чем
   лично я крупно сомневаюсь), то нужно вообще отказаться от WordPress, php, apache
   и написать на ассемблере своего собственного узкоспециализированного http-демона
   🙂
 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28743)
 * 🙂
    Я еще подумала, что подключенный плагин обрабатывается при каждой загрузке
   страницы, а мои три функции только когда страница регистрации грузится. Или ошибаюсь?
   По идее, движок по всем плагинам пробегается прежде чем выбрать нужные? В любом
   случае, варианты плагинов стоит еще посмотреть, а то публичную часть я вывела,
   а вот в админке пока этих полей не вижу. Не уверена, что самой в админку лезть
   выгоднее по производительности ))
 *  Модератор [Sergey Biryukov](https://ru.wordpress.org/support/users/sergeybiryukov/)
 * (@sergeybiryukov)
 * Live and Learn
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28753)
 * > А по поводу отладки не подскажете — с чего начать?
 * Посмотреть в `wp-login.php`, что происходит с объектом `$errors` до и после действия`
   register_post`. Вывести промежуточные значения. Проверить, сохраняются ли стандартные
   ошибки типа `empty_username` или `email_exists`. Попробовать найти строку, после
   которой объект оказывается пустым. Возможно, он затирается фильтром `registration_errors`?
 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28758)
 * Спасибо всем большое за участие. Проблема решилась добавлением `global $errors;`
 *     ```
       function check_fields($login, $email, $errors) {
       global $errors;
       ...
       }
       ```
   
 * Элементарно, но… я с этого начинала и получала ошибку. Кроме своей функции, `
   global $errors;` надо добавить в _register\_new\_user()_
 *     ```
       function register_new_user( $user_login, $user_email ) {
               global $errors;
               $errors = new WP_Error();
               ...
       ```
   
 * Тогда все работает.
    Додумалась не сама, здесь нашла [http://blog.alexgirard.com/tag/hack/](http://blog.alexgirard.com/tag/hack/)
 * > **‘register_post’ action**
   > You won’t be able to add more errors in $errors if you do not make it global
   > in _register\_new\_user()_ of _wp-login.php_:
   >     ```
   >     function register_new_user($user_login, $user_email) {
   >     global $errors;
   >     ```
   > 
 *  Модератор [Sergey Biryukov](https://ru.wordpress.org/support/users/sergeybiryukov/)
 * (@sergeybiryukov)
 * Live and Learn
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28759)
 * Спасибо, что поделились. Оказывается, это описано в багтрекере:
    [http://core.trac.wordpress.org/ticket/10672](http://core.trac.wordpress.org/ticket/10672)
   Без объявления глобальной переменной код работает только на PHP 5.x. Однако объект`
   $errors` передаётся в `register_post` не для изменения, а для информации. Менять
   его нужно с помощью фильтра `registration_errors`:
 *     ```
       add_filter('registration_errors', 'check_fields', 10, 3);
       function check_fields($errors, $login, $email) {
       	$errors->add('demo_error',__('This is a demo error, and will halt registration'));
       	return $errors;
       }
       ```
   
 * В этом случае правка `wp-login.php` не требуется. Обновил Кодекс.
 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28760)
 * Ооо! Спасибо огромное! Отлично!
    `wp-login.php` вернула в исходное 🙂 Все работает.
 * Честно говоря, я предполагала, что должна быть возможность обновления значения,
   пыталась использовать `add_filter`, но очень слабо до сего момента представляла,
   как он работает и ничего не получалось. Спасибо 🙂
 * Единственное, в этом решении есть маленький нюанс (который, впрочем, мне не мешает):
   сначала выдаются ошибки — имя, емайл, пароль, а потом все остальные. В варианте
   с `register_post` обход был в порядке очередности вывода полей — имя, емайл, 
   дополнительные поля, пароль.
    Но в данном варианте это не критично.
 *  [Yuriy Stepanov](https://ru.wordpress.org/support/users/stur/)
 * (@stur)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28762)
 * Вообще это очень круто! первый раз вижу женщину которая умеет обращаться с функцией**
   add_filter** и знает, что такое **global**. Думал в природе такого не существует.
   
   _извините за офтоп_
 *  Модератор [Юрій](https://ru.wordpress.org/support/users/yube/)
 * (@yube)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28764)
 * Есть много, друг Горацио… 🙂
 *  Автор [Olmar](https://ru.wordpress.org/support/users/olmar/)
 * (@olmar)
 * [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/#post-28765)
 * _stur_, спасибо, конечно…
 * Я вернулась еще раз поблагодарить _Sergey Biryukov_ за решение с `add_filter`
   🙂 Спасибо за просветление мозга 🙂
    Раньше я добавляла массив дополнительных
   полей функцией `_my_get_user_contactmethods()` так:
 *     ```
       add_action( '_wp_get_user_contactmethods', '_my_get_user_contactmethods' );
       function _my_get_user_contactmethods() {
           $user_contactmethods = array(
               'org' => __('Организация'),
               'city' => __('Город'),
               'tel' => __('Телефон')
           );
           return apply_filters('user_contactmethods',$user_contactmethods);
       }
       ```
   
 * А потом, соответственно, пользовалась массивом `_my_get_user_contactmethods`,
   а стандартный `_wp_get_user_contactmethods` игнорировала, так мне _aim_, _yim_
   и _jabber_ не нужны.
    Естественно, в админке я своих полей просто не видела. 
   Сейчас переписала код на
 *     ```
       add_filter('user_contactmethods', '_my_get_user_contactmethods');
       function _my_get_user_contactmethods() {
           $user_contactmethods = array(
               'org' => __('Организация'),
               'city' => __('Город'),
               'tel' => __('Телефон')
           );
           return $user_contactmethods;
       }
       ```
   
 * Теперь `user_contactmethods` просто заменяется на мои поля. И в админке тоже.
   Ура!
    Кроме того, в базе данных при регистрации не создаются ненужные пустые 
   строки _aim_, _yim_ и _jabber_ 🙂 А еще при таком варианте стала не нужна своя
   функция сохранения моих дополнительных полей. Вот этот кусок кода я просто вырезала
   за ненадобностью.
 *     ```
       add_action( 'personal_options_update', 'save_extra_profile_fields' );
       add_action( 'edit_user_profile_update', 'save_extra_profile_fields' );
       add_action( 'profile_update', 'save_extra_profile_fields' );
   
       function save_extra_profile_fields( $user_id ) {
   
           if ( !current_user_can( 'edit_user', $user_id ) )
               return false;
   
           update_usermeta( $user_id, 'org', $_POST['org'] );
           update_usermeta( $user_id, 'city', $_POST['city'] );
           update_usermeta( $user_id, 'tel', $_POST['tel'] );
       }
       ```
   
 * _Извините за офтоп. Но вдруг кому-нибудь пригодится_

Просмотр 15 ответов — с 1 по 15 (всего 16)

1 [2](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/page/2/?output_format=md)
[→](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/page/2/?output_format=md)

 Тема «Регистрация — проблема проверки дополнительных полей» закрыта для новых ответов.

## Метки

 * [add_action](https://ru.wordpress.org/support/topic-tag/add_action/)
 * [register_post](https://ru.wordpress.org/support/topic-tag/register_post/)

 * Форум: [Проблемы и решения](https://ru.wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 16 ответов
 * 5 участников
 * Последний ответ: [Sergey Biryukov](https://ru.wordpress.org/support/users/sergeybiryukov/)
 * Последняя активность: [15 лет, 10 месяцев назад](https://ru.wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%b4%d0%be%d0%bf%d0%be%d0%bb/page/2/#post-28766)
 * Статус: решённая

## Темы

### Самые популярные темы

### Темы без ответов

### Без вопроса

### Решённые

### Нерешённые

### Все темы
