Если вы введете в поиске "Как добавить новое поле в профиле пользователя WordPress", то, скорее всего, вы обнаружите всевозможные примеры с десятками строк кода, позволяющие извлекать дополнительную информацию о пользователях при регистрации. Однако, если все, что вам надо — это добавить, скажем, одно новое поле с Twitter аккаунтом, есть более простой способ, как это сделать!

Фильтр user_contactmethods

Фильтр user_contactmethods позволяет добавлять новые и исключать существующие контактные поля на странице Профиля пользователя. Главное преимущество этого фильтра заключается в том, что создание и обновление новых полей контактной информации ложится на плечи самого движка WordPress, а не через сторонние скрипты и плагины.

Давайте рассмотрим пример, в котором мы добавим 2 новых поля в Профиль пользователя: это будет Twitter и Facebook. Просто добавьте следующий код в ваш файл  functions.php:

add_filter('user_contactmethods', 'my_user_contactmethods');

function my_user_contactmethods($user_contactmethods){

  $user_contactmethods['twitter'] = 'Twitter Username';
  $user_contactmethods['facebook'] = 'Facebook Username';

  return $user_contactmethods;
}

Вот так будет выглядеть контактная информация в Профиле после внесенных изменений:

Если вы хотите скрыть некоторые поля из контактной информации, просто исключите их из массива. Давайте, например, уберем поля AIM, Yahoo IM и Jabber / Google Talk:

function my_user_contactmethods($user_contactmethods){

  unset($user_contactmethods['yim']);
  unset($user_contactmethods['aim']);
  unset($user_contactmethods['jabber']);

  $user_contactmethods['twitter'] = 'Twitter Username';
  $user_contactmethods['facebook'] = 'Facebook Username';

  return $user_contactmethods;
}

В результате получится вот так:

Чтобы вывести в коде эту пользовательскую информацию, просто используйте функцию get_user_meta:

echo get_user_meta(1, 'twitter', true);

В примере выше мы вывели аккаунт Twitter для пользователя с ID 1. Аргумент true в коде использован для того, чтобы вывести значение как текст, а не как массив данных.

На этом все. Надеюсь, этот совет окажется вам полезен.

Источник: WP.tutsplus.com

Вам понравился материал?

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

19 комментариев

сначала новые
по рейтингу сначала новые по хронологии

Вот написал пост о разработке личного кабинета, в ближайшем будущем хочу доработать статью и возможно плагин напишу небольшой.

Если интересно заходите, было бы супер услышать ваше мнение и советы. А возможно уже есть такой плагин но я об этом пока не знаю ). Вообщем если есть идеи пишите на сайте или в соц сети.
http://wp-admin.com.ua/razrabotka-lichnogo-kabineta-wordpress/

Вставлю 5 коп. Выводить данные можно ещё одним способом: echo the_author_meta('twitter');

Вот пример вывода поля биография, причем id подставляется динамически

error_reporting(E_ALL);

$user = get_current_user_id();

$sql = "SELECT meta_value FROM wp_usermeta WHERE meta_key='description' AND user_id='$user'";

$result = mysql_query($sql);

$row = mysql_fetch_assoc($result);

echo $row['meta_value'];

Здравствуйте. Спасибо за статью, использовал код из неё вместе с Gravity Forms- теперь я могу создавать регистрационные формы с индивидульными полями в профиле.
Есть вопрос - как вывести дополнительные поля из профиля, которые были добавлены благодаря вашей статье на странице "Пользователи", чтобы можно было видеть их не заходя в профиль каждого пользователя.

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

К сожалению, я не знаю, где находится код страницы "пользователи" админпанели. По поиску не смог найти.

Вот Вы пишите "echo get_user_meta(1, 'twitter', true);", где 1 - ID пользователя. А можно как-нибудь сделать так, чтобы ID вводилось для каждого пользователя автоматом. То есть у меня на сайте есть 3 автора, для каждого из них я прописываю Twitter-аккаунты в профиле, и необходимо, чтобы в посте конкретного автора прописывался именно его твиттер.

Затрудняюсь ответить, но для этих целей есть другие плагины, которые в конце каждого поста выводят блок с информацией об авторе. И там может быть указан его твиттер и другие профили. Посмотрите этот урок: http://wordpresso.org/tutorials/kak-dobavit-bolshe-dannyih-v-blok-ob-avtore-s-pomoshhyu-besplatnogo-plagina/

Спасибо за подсказку, но я нашел решение без использования плагинов)

Алексей

Расскажите, как вы это сделали?

А как вставить в профиль другие элементы? например контейнер в надписью.

Для этого нужно править конфигурационные файлы в папке wp-admin. Это руководство не поможет.

Добрый день, для меня очень актуальна данная тема, так как пытаюсь сделать полноценный личный кабинет. Но вот вопрос возник- А как удалить любые ненужные поля? Например поле «last name». У меня стоит плагин «Theme My Profile» и версия wordpress 3.4.1! Пытался удалить ненужные поля в [wp-admin/user-edit] но не помогло! Я как говорится почти полный chainik в php и html но уже кое что начинаю понимать)

Хотелось бы знать - решили ли Вы эту задачу? Помоему, человечеству это не удалось, по крайней мере гугл об этом ничего не знает или я там забанен :-)

dispay: none!important; - forever ! :)

Здравствуйте!
Попробовал, но наткнулся на то, что functions.php два и в теме и где-то еще. В какой из них надо вставлять код фильтра, в какое лучше место, без всяких "//" ?

Вы можете вставить код в functions.php вашей темы, тогда при ее активации будет применено это действие и лишние поля уберутся.

Ivan Klimov

Добрый день!

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

Суть, что бы можно было отдельным пользователям указывать скидку на товар, и когда пользователь будет просматривать товар, что бы он видел уже товар со скидкой..
Спасибо за ответ!