При работе с WordPress нам часто приходится расширять данные пользователей. Например, нужно добавить поле в котором будет записан банковский счет пользователя.
В этой заметке я покажу, можно быстро добавить свои поля на страницу профиля пользователя и сохранить данные в метаполя.
Для этого давайте создадим плагин (или можно добавить этот код в файл темы functions.php, но это не профессионально, потому что при смене темы поля пропадут) и назовем его «Дополнительные поля для профиля». Для этого создайте php файл и добавьте туда такой код:
<?php /* Plugin Name: Дополнительные поля для профиля Description: Добавляет новые поля в профиль пользователя. Version: 1.0 */
1141″ />Это основа плагина, в котором нет ни строки кода. перейдем к коду.
Для создания дополнительных полей в профиле пользователя нам понадобятся фильтры (события):
- show_user_profile — срабатывает в конце страницы профиля.
- edit_user_profile — срабатывает в конце страницы редактирования профиля.
- personal_options_update — срабатывает при обновлении профиля.
- edit_user_profile_update — срабатывает при обновлении редактирования профиля.
Также, нам нужны будут функции для получения/добавления данных в БД:
- get_user_meta() — Получает мета поле указанного пользователя.
- update_user_meta() — Обновляет мета поле указанного пользователя.
А сам код плагин будет выглядеть так:
<?php /* Plugin Name: Дополнительные поля для профиля Description: Добавляет новые поля в профиль пользователя. Version: 1.0 */ ### дополнительные данные на странице профиля add_action('show_user_profile', 'my_profile_new_fields_add'); add_action('edit_user_profile', 'my_profile_new_fields_add'); add_action('personal_options_update', 'my_profile_new_fields_update'); add_action('edit_user_profile_update', 'my_profile_new_fields_update'); function my_profile_new_fields_add(){ global $user_ID; $accaunt = get_user_meta( $user_ID, "user_accaunt", 1 ); ?> <h3>Дополнительные данные</h3> <table class="form-table"> <tr> <th><label for="user_fb_txt">Банковский счет</label></th> <td> <input type="text" name="user_accaunt" value="<?php echo $accaunt ?>"><br> </td> </tr> </table> <?php } // обновление function my_profile_new_fields_update(){ global $user_ID; update_user_meta( $user_ID, "user_accaunt", $_POST'user_accaunt' ); }
Теперь небольшой разбор кода:
Функция my_profile_new_fields_add() подключается к двум фильтрам и выводит HTML код дополнительных полей.
Функция my_profile_new_fields_update() также подключается к двум фильтрам и обновляет метаполя пользователя, при обновлении страницы профиля.
А вот так это выглядит на странице профиля/редактирования профиля:
Дополнительные контактные данные
Также, дополнительные поля на страницу профиля можно добавить через фильтр user_contactmethods, но там не все так гибко и предусмотрен он, чтобы добавлять контактые данные — только текстовые поля, в раздел Контакты.
function modify_contact_methods( $contact_fields ) { // Новые поля $contact_fields'twitter' = 'Twitter Username'; $contact_fields'facebook' = 'Facebook URL'; $contact_fields'gplus' = 'Google+ URL'; // удаляем имеющиеся unset( $contact_fields'jabber' ); return $contact_fields; } add_filter('user_contactmethods', 'modify_contact_methods');
Заботиться об обновлении этих полей в БД не нужно, WordPress сделает все сам.
В результате на странице профиля у нас появятся 3 новых поля:
Чтобы получить новые поля в шаблоне для вывода, используйте такую функцию get_the_author_meta():
$twitterHandle = get_the_author_meta('twitter');