moovix

WordPress: Добавляем дополнительные поля в профиль пользователя WordPress

Moovix » Блог » WordPress: Добавляем дополнительные поля в профиль пользователя WordPress
Все следующие манипуляции с кодом будут происходить в файле function.php активной темы. В результате, в профиле пользователя появятся 3 дополнительных поля. Для добавления полей на страницу профиля, будем использовать WordPress хаки:

Все следующие манипуляции с кодом будут происходить в файле function.php активной темы. В результате, в профиле пользователя появятся 3 дополнительных поля.

Для добавления полей на страницу профиля, будем использовать WordPress хаки: show_user_profile (просмотр и изменение дополнительных полей только собственного профиля) и edit_user_profile (тоже самое, но для всех профилей), а также функцию для формирования полей.

				
					add_action( 'show_user_profile', 'add_extra_social_links' );
      add_action( 'edit_user_profile', 'add_extra_social_links' );
      function add_extra_social_links( $user )
      {
      ?>
      <h3>Дополнительные данные пользователя</h3>
      <table class="form-table">
          <tr>
            <th><label for="facebook_profile">Facebook Profile</label></th>
            <td><input type="text" name="facebook_profile"
                    value="<?php echo esc_attr(get_the_author_meta( 'facebook_profile', $user->ID )); ?>"
                    class="regular-text" /></td>
          </tr>
          <tr>
            <th><label for="twitter_profile">Twitter Profile</label></th>
            <td><input type="text" name="twitter_profile"
                    value="<?php echo esc_attr(get_the_author_meta( 'twitter_profile', $user->ID )); ?>"
                    class="regular-text" /></td>
          </tr>
          <tr>
            <th><label for="google_profile">Google+ Profile</label></th>
            <td><input type="text" name="google_profile"
                    value="<?php echo esc_attr(get_the_author_meta( 'google_profile', $user->ID )); ?>"
                    class="regular-text" /></td>
          </tr>
      </table>
      <?php
    }
				
			

Приведенный выше код добавляет на страницу с профилем пользователя 3 новых поля. Стоит обратить внимание на атрибут name у input полей, наименования полей понадобятся при сохранении введенных данных в базу. Также обратите внимание на атрибут value, мы используем функцию get_the_author_meta() для того, чтобы получить уже хранящиеся данные по этому пользователю и выводим их в поля для редактирования.

Для использования этой функции требуется два параметра:

				
					<?php get_the_author_meta( $meta_key, $user_id ); ?>
				
			

Функция esc_attr кодирует символы <, >, &, » и ‘.

Сохраняем введенные данные

Когда происходит сохранение данных профиля пользователя WordPress, мы должны добавить собственное действие для сохранения информации в новых полях. В этом нам помогут хаки personal_options_update (сохранение данных пользовательских полей собственного профиля WordPress) и edit_user_profile_update (сохранение данных пользовательских полей чужих профилей WordPress).

Затем мы можем использовать глобальный массив $_POST, чтобы получить данные введенные в пользовательские поля (получаем значение поля по его наименованию) на странице профиля пользователя и занести эти данные в базу. Чтобы обновить данные пользователя в базе мы должны использовать WordPress функцию update_user_meta().

				
					<?php update_user_meta( $user_id, $meta_key, $meta_value, $prev_value ); ?>

				
			

Данная функция принимает 4 параметра:

  • $user_id — идентификатор пользователя;
  • $meta_key — ключ поля;
  • $meta_value — значение, которое необходимо сохранить;
  • $prev_value — старое значение, используется для сравнения.
				
					add_action( 'personal_options_update', 'save_extra_social_links' );
        add_action( 'edit_user_profile_update', 'save_extra_social_links' );
            function save_extra_social_links( $user_id )
          {
            update_user_meta( $user_id,'facebook_profile', sanitize_text_field( $_POST['facebook_profile'] ) );
            update_user_meta( $user_id,'twitter_profile', sanitize_text_field( $_POST['twitter_profile'] ) );
            update_user_meta( $user_id,'google_profile', sanitize_text_field( $_POST['google_profile'] ) );
        }
				
			

Также используется функция sanitize_text_field для обработки сохраняемых данных, удаляет все потенциально опасные символы.

Отображение данных пользователя

Если Вы хотите отобразить информацию о пользователе не только в админке, но и в пределах вашей темы, то есть две функции, которые можно использовать:

  • the_author_meta( $field, $userID )
  • get_the_author_meta( $field, $userID )

Разница между этими двумя функциями в том, что get_the_author_meta() вернет данные, а the_author_meta() выведет данные на экране.

				
					<?php
       // вернет значение, можно присвоить переменной
       $twitter = get_the_author_meta( 'twitter_profile', $userID );
       // выведет на экран (аналогично echo)
       the_author_meta( 'twitter_profile', $userID );
    ?>
				
			
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Moovix » Блог » WordPress: Добавляем дополнительные поля в профиль пользователя WordPress

Есть вопрос? мы онлайн

Есть проект? Заполните бриф.

top