Как добавить пользовательские поля формы на страницу профиля пользователя?

14 нояб. 2010 г., 06:34:13
Просмотры: 34.4K
Голосов: 30

На странице профиля пользователя есть следующие поля:

Имя пользователя
Имя
Фамилия
Псевдоним Отображаемое имя Контактная информация Электронная почта Веб-сайт AIM Yahoo IM
Jabber / Google Talk

Как можно добавить больше полей в этот раздел. Такие поля, как номер телефона, адрес или любые другие.

0
Все ответы на вопрос 2
3
39

Вам необходимо использовать хуки 'show_user_profile', 'edit_user_profile', 'personal_options_update' и 'edit_user_profile_update'.

Вот код для добавления поля "Телефон":

add_action( 'show_user_profile', 'yoursite_extra_user_profile_fields' );
add_action( 'edit_user_profile', 'yoursite_extra_user_profile_fields' );
function yoursite_extra_user_profile_fields( $user ) {
?>
  <h3><?php _e("Дополнительная информация профиля", "blank"); ?></h3>
  <table class="form-table">
    <tr>
      <th><label for="phone"><?php _e("Телефон"); ?></label></th>
      <td>
        <input type="text" name="phone" id="phone" class="regular-text" 
            value="<?php echo esc_attr( get_the_author_meta( 'phone', $user->ID ) ); ?>" /><br />
        <span class="description"><?php _e("Пожалуйста, введите ваш телефон."); ?></span>
    </td>
    </tr>
  </table>
<?php
}

add_action( 'personal_options_update', 'yoursite_save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'yoursite_save_extra_user_profile_fields' );
function yoursite_save_extra_user_profile_fields( $user_id ) {
  $saved = false;
  if ( current_user_can( 'edit_user', $user_id ) ) {
    update_user_meta( $user_id, 'phone', $_POST['phone'] );
    $saved = true;
  }
  return true;
}

Этот код добавит поле на экран редактирования пользователя, которое будет выглядеть примерно так:

Поле телефона в профиле пользователя WordPress

Также доступны несколько статей по теме, которые могут быть полезны:

Или, если вы предпочитаете не писать код самостоятельно, существуют плагины, добавляющие подобные функции, например следующие (хотя уверен, есть и другие):

14 нояб. 2010 г. 06:52:53
Комментарии

Майк, у меня возникла куча проблем с сохранением моих изменений. В итоге я решил это, сделав полный "поиск и замену". Для себя на будущее: поля "name" и "title" обязательно должны точно совпадать?

Jonathan Wold Jonathan Wold
28 мар. 2011 г. 19:43:47

@Jonathan Wold - "поля "name" и "title" обязательно должны точно совпадать?" Ты не дал мне достаточно контекста, чтобы я мог ответить. И, возможно, тебе стоит создать полностью новый вопрос.

MikeSchinkel MikeSchinkel
29 мар. 2011 г. 10:26:02

@MikeSchinkel Плагин Cimy User Extra Fields, на мой взгляд, не лучшая рекомендация. Поддержка практически отсутствует, а код... хм.

kaiser kaiser
26 авг. 2011 г. 01:07:47
0
// удаляем aim, jabber, yim 
function hide_profile_fields( $contactmethods ) {
    unset($contactmethods['aim']);
    unset($contactmethods['jabber']);
    unset($contactmethods['yim']);
    return $contactmethods;
}

// добавляем новые поля
function my_new_contactmethods( $contactmethods ) {
    //добавляем День рождения
    $contactmethods['birthday'] = 'День рождения';
    //добавляем Адрес
    $contactmethods['address'] = 'Адрес';
    //добавляем Город
    $contactmethods['city'] = 'Город';
    //добавляем Область/Штат
    $contactmethods['state'] = 'Область/Штат';
    //добавляем Почтовый индекс
    $contactmethods['postcode'] = 'Почтовый индекс';
    //добавляем Телефон
    $contactmethods['phone'] = 'Телефон';
    //добавляем Мобильный телефон
    $contactmethods['mphone'] = 'Мобильный телефон';

    return $contactmethods;
}
add_filter('user_contactmethods','my_new_contactmethods',10,1);
add_filter('user_contactmethods','hide_profile_fields',10,1);

Надеюсь, это поможет.

Источник: WPBeginner

2 дек. 2010 г. 00:06:23