Дополнительные поля в профиле пользователей
Существует множество плагинов, которые расширяют возможности стандартной регистрации в блоге на WordPress. Однако, не всегда стоит пользоваться дополнительным плагином, если все, что вам от него нужно это пара лишних полей в профиле пользователя вроде аськи или твиттера. Плагинами, конечно, пользоваться проще, но, к сожалению, простых и легких плагинов расширения пользовательских профилей мне найти не удалось. Такие монстры как
Чтобы добавить дополнительные поля в профиль пользователя достаточно открыть файл functions.php вашего шаблона и вставить туда код:
add_action('show_user_profile', 'show_my_profile_fields'); add_action('edit_user_profile', 'show_my_profile_fields'); function show_my_profile_fields($user) { ?> <h3>Дополнительные поля</h3> <table class="form-table"> <tr> <th><label for="twitter">Twitter</label></th> <td> <input type="text" name="twitter" id="twitter" value=" <?php echo esc_attr(get_the_author_meta('twitter', $user->ID)); ?>" class="regular-text" /><br /> <span class="description">Пожалуйста введите ваш Twitter логин. </span> </td> </tr> <tr> <th><label for="icq">ICQ</label></th> <td> <input type="text" name="icq" id="icq" value=" <?php echo esc_attr(get_the_author_meta('icq', $user->ID)); ?>" class="regular-text" /><br /> <span class="description">Пожалуйста введите ваш ICQ номер.</span> </td> </tr> </table> <?php } |
Этот код добавит поля ICQ и Twitter в профиль пользователя. На примере этого кода вы можете добавить любые другие нужные вам поля. Однако этот код только добавляет поля в профиль, а если вы захотите сохранить значения этих полей, то ничего не произойдет. Чтобы значения сохранялись, добавьте еще код в файл functions.php:
add_action('personal_options_update', 'save_my_profile_fields'); add_action('edit_user_profile_update', 'save_my_profile_fields'); function save_my_profile_fields($user_id) { if ( !current_user_can( 'edit_user', $user_id ) ) return false; update_usermeta($user_id, 'twitter', $_POST['twitter']); update_usermeta($user_id, 'icq', $_POST['icq']); } |
Теперь у вас есть дополнительные поля в профиле, которые полностью работают. Довольно просто и избавляет от необходимости установки лишних плагинов. Но как использовать эту дополнительную информацию из профиля на самом блоге? Для этого добавьте в файл functions.php еще одну функцию:
function my_author_box() { ?> <div class="author-profile vcard"> <p class="author-name"><?php echo get_avatar(get_the_author_meta('user_email'), '16'); ?> Автор статьи: <?php the_author_posts_link(); ?></p> <?php if (get_the_author_meta('twitter')) { ?> <p class="twitter"> <img src="http://www.wordpressplugins.ru/wp-content/themes/wpplugins/images/twitter.png" width="16" height="16" /> Twitter: <a href="http://twitter.com/<?php the_author_meta('twitter'); ?>"><?php the_author_meta('twitter'); ?></a> </p> <?php } ?> <?php if (get_the_author_meta('icq')) { ?> <p class="icq"> <img src="http://web.icq.com/whitepages/online?icq=<?php the_author_meta('icq'); ?>&img=5" /> ICQ: <?php the_author_meta('icq'); ?> </p> <?php } ?> </div> <?php } |
А в нужном файле шаблона (например, в single.php) вставьте вызов этой функции my_author_box():
<?php my_author_box(); ?> |
Получится что-то вроде:
Необязательно добавлять функцию my_author_box() именно в файл functions.php, можно ее вставить прямо в нужный файл шаблона. Но использование файла functions.php позволяет вам вызывать показ нужной информации из профиля лишь одной строчкой вызова функции и, тем самым, вы не будете нагружать файлы шаблона лишним кодом.
Понравился пост? Подпишись на обновления по RSS или Twitter !
#41,
Подскажите пожалуйста, можно ли сделать так, чтобы в доп полях было поле для аватарки ? Идея такова, чтобы в поле ввести путь до аватарки и она отобразилась в комментариях.
Сейчас использую Simple Local Avatars, но заметил, что плагин делает слишком много лишних запросов в БД. Хочу от этого избавиться.
Спасибо.
#42,
где вы там лишние запросы то заметили?
да и какая разница сколько запросов, если они не влияют на скорость загрузки?
а про вашу идею - путь до аватарки куда? плагин загружает аватарки на сайт, доп. полем вы это не сделаете.
#43,
В самом посте:
5.93 MB | MySQL:60 | 1.057 sec - плагин включен
5.62 MB | MySQL:32 | 1.052 sec - плагин выключен
и это при том, что в посте 28 комментариев. Получается, что на каждый коммент по 1 запросу. Если бы 1-2 запроса, я бы не рыпался. Но по 1 запросу на каждый комментарий - имхо не лучшее решение.
Аватарки ручками залью к себе на хостинг и укажу путь к ним. Хочу задать аватарки нескольким пользователям, граватар они не используют, да и для дальнейших манипуляций, которые я запланировал - граватар не подойдет.
#44,
слушайте, ну а что вы на количество запросов то так молитесь? 5 тысячных секунды разницы - зачем что либо менять? я бы еще понял, если запрос был связан с выборкой по всей базе данных, что вызывало бы тормоза - но малюсенький и точный запрос запрос - зачем от него избавляться то?
это уже напоминает оптимизацию ради самой оптимизации. совершенно бессмысленная, но зато оптимизация.
#45,
Да в том-то и дело, что из этих 28 комментариев примерно половина - мои ответы. А следовательно, зачем делать каждый раз запрос, если данные уже получены и так ??? Вы же не спрашиваете у одного и того же собеседника каждый раз, как его зовут, если он уже представился. Тут тоже самое.
Возможно, но все мы знаем, что из секунд складываются минуты, из Кб - Мб. При больших нагрузках прирост в скорости будет заметен.
Добавил поле по примеру выше, указал полный путь до аватарки. Осталось понять, как теперь ее вывести в комментарии. Что-то мне подсказывает, что contactmethods - это не совсем то, что мне нужно.
За вывод аватарок у меня отвечает следующая строчка:
Буду очень признателен за помощь в решении данного вопроса.
#46,
да и взяли бы пример из кода статьи, что-то типа:
ну по хорошему еще бы проверку сделать на то, чтобы 'ava' не была с пустым значением, но это уже детали.
#47,
Я об этом думал, но так и не понял, как это срастить с моим кодом.
Сейчас принцип работы такое, если есть граватар - он выводится, если нет - выводится картинка по умолчанию, а для зарегистрированных пользователей выводится аватарка через плагин Simple Local Avatars. Но при использовани указанного кода выше граватар и авы по умолчанию работать не будут. Или я не совсем правильно понял, как это и куда вставлять ?
Пустой она не будет. Зарегистрированных пользователей не много, регистрация приватная, поэтому заполнить это поле труда не составит.
#48,
я так и не понял, что вам в итоге надо получить :) и граватар и локальный аватар, да еще и указанный через поле аватар?
прежде, чем я смогу вам что-то подсказать - скажите - каким образом у вас выводятся комментарии? если через функцию comment_form, то не выйдет у вас ничего. эту функцию надо разбивать на кастомную, чтобы иметь возможность править вызов граватара. до wordpress 2.7 этой функции не было и комментарии выводились вручную отдельными функциями в comments.php - сейчас в шаблонах почти все поголовно используют вызов comment_form, которая сама выводит стандартный вид комментариев - править его вывод вы не можете, включая и вызов граватаров.
#49,
Именно. Извиняюсь за путаницу )))
Комментарии выводятся кастомной функцией:
#50,
ну можно попробовать что-нибудь придумать. добавьте в functions.php код:
а в этой вашей функции mytheme_comment вызов аватара будет таким:
то есть если граватар существует - выводится именно он. если же его не существует - то выводится аватарка, указанное в поле профиля.
извините, но локальные аватары плагина в этой схеме никак не предусмотрены. да и вообще - это все бессмысленно с точки зрения увеличения производительности блога. одна только проверка на существование граватара займет больше времени, чем 30 запросов к базе данных плагина Simple Local Avatars.
#51,
Супер. Спасибо большое. Сегодня вечером попробую поставить и потестирую с другими плагинами аватарок, о результатах обязательно отпишусь.
#52,
Протестировал. function validate_gravatar видимо выдает ошибку, т.к. открывается белая страница.
#53,
нет там ошибки, проверяйте как вставляли код и не разбили ли вы нужные функции и тд и тп. только что проверил на тестовом сервере - функция прекрасно работает и отлично проверяет существование граватара.
а белый экран может означать что угодно - от неправильной кодировки файла до отсутствие знака ';' в конце какой-нибудь строки кода - тут точнее могут сказать только логи ошибок сервера.
#54,
если кому интересно, то вот способ добавления полей гораздо проще указанного в статье (устарел этот способ уже).
#55,
хочу добавить новых пользователей на сайт 1000чел(традиционной регистраций не будет)сам создам аккаунты и раздам логин и пароль и емайл разумеется.Так хочу через встроенный редактор добавить пользователей,но там не хватает еще полей,как добавить поля?
Подскажите как или плагин
#56,
На самом деле удобная фишка. Но тут есть критические косяки. Ну мне так кажется. В поле можно вставить код скрипта, банально проверка вывода alert и при заходе на страницу где выводится инфа с этого поля, скрипт срабатывает. Хотя казалось бы прописано esc_attr, но фиг там. Я в пхп полный нуб, но час гугления, навел на решение.
Все кроется вот тут
Надо так
Вся фишка в sanitize_text_field() которой надо обложить вовсе не input, хотя может они в паре как-то работают.
Тогда он удаляет любой шлак введенный в эти поля. Что скрипты, что пхп. И оставляет поле пустым и на странице вывода тоже поле не показывается. Все как положено.
Еще update_usermeta заменил на update_user_meta я так понял первое устарело, но работало, что странно. Ну как я уже говорил, в пхп нуб. Просто для меня это самое удобное решение в плане доп полей и вывода инфы в профиле точнее на странице author.php.
У кого еще какие мысли есть по этому поводу? Что тут можно еще улучшить. Вещь годная реально.
#57,
Те правки, которые я внес в метод описанный в вашей статье, делает этот мод гораздо круче того, что по ссылке )
Хотя тот тоже хорош, но я не разобрался как разместить эти поля не в разделе контакты, а ниже, как в вашем случае, в конце так сказать. Плюс тут под самим полем ввода можно свой текст указать, где людям показать типа пример, что можно написать туда.