Добавление дополнительных полей к профилю пользователя
21 января, 2010В WordPress не только у записей есть дополнительные поля, но и у пользователей.
Зачем дополнительные поля пользователю? Ну к примеру есть у пользователя такие настройки как Контакты. В контактах есть поля: E-mail, Сайт и несколько дополнительных полей для IM-контактов. Но, нет например Twitter’a, Facebook’a и т.д.
Попробуем исправить это. Используем для примера добавление дополнительного поля – аккаунта в твиттере.
Открываем файл
functions.php
Добавляем туда следующий код:
<?phpfunction action_show_user_profile($user){?><h3>Дополнительные контакты</h3><table><tr><th><label for="twitter">Twitter</label></th><td><span>http://twitter.com/</span><input type="text" name="twitter" id="twitter" value="<?php echoesc_attr(get_the_author_meta('twitter', $user->ID) ); ?>" /></td></tr></table><?php}?>
Эта функция будет добавлять дополнительные настройки при редактировании профиля пользователя.
и еще немного кода:
<?phpfunction action_user_option_update($user_id){update_usermeta($user_id, 'twitter',( isset($_POST['twitter']) ? $_POST['twitter'] : '' ) );}?>
Эта функция будет сохранять наши новые настройки.
И наконец делаем несколько хуков:
<?phpadd_action('show_user_profile', 'action_show_user_profile');add_action('edit_user_profile', 'action_show_user_profile');add_action('personal_options_update', 'action_user_option_update');add_action('edit_user_profile_update', 'action_user_option_update');?>
Первый и второй хук навешивает нашу функцию
action_show_user_profile()
на просмотр и редактирование профиля.
Третий и четвертый хук навешивает функцию
action_user_option_update()
на то действие которое происходит когда вы нажимаете на кнопку “Обновить информацию” при редактировании Вашего или чьего-либо профиля.
Вот что у нас получилось:
Теперь мы смело можем использовать это дополнительное поле при помощи следующего кода:
echo 'http://twitter.com/'.get_the_author_meta('twitter');
которая выведет нам http://twitter.com/наш_твиттер
Ну или полный вариант:
echo '<a href="http://twitter.com/'.get_the_author_meta('twitter').'">Follow me!</a>';
Который выведет ссылку на наш аккаунт в твиттере с надписью – Follow me!
Вот и все.

Я хочу сделать в профиле пользователей поле “Поинты” которые сможет редактировать администратор из админки. Поинты должны отображаться только у группы подписчиков. Не подскажите как это сделать?
То есть поинты будут начисляться вручную админом?
при попытке обновить информацию в профиле выдает
Warning: Cannot modify header information – headers already sent by (output started at /home/dbuser/site/www/wp-content/themes/visio/Visio/functions.php:49) in /home/dbuser/site/www/wp-includes/pluggable.php on line 868
@Ex_Animal
Надо весь код смотреть, скорее всего вы где то ошиблись.
rOOse
теперь, когда пост редактирую или добавляю, то же сообщение появляется, а когда пользователь выходит с аккаунта вообще штук десять с этим же pluggable.php, где-то напартачил
кстати я добавил в functions.php, который в папке с шаблоном, или нужно было в тот, который в папке wp-includes ?
В тот что в папке с шаблоном. Закиньте functions.php куда-нибудь я посмотрю.
krasivye-stihi.ru/avtory/dopolnitelnye-polya
тут же можете комментировать
все, разобрался с выводом, эти поля теперь же можно достать как и стандартные поля из мета-данных о пользователе
спасибо за помощь !
Пожалуйста)
Сделал плагин, примерно тоже самое через админку позволяет делать в визуальном режиме – http://my-wordpress.ru/plugin/extend-profile-pts-wopdpress.php