При работе с WordPress нам часто приходится расширять данные пользователей. Например, нужно добавить поле в котором будет записан банковский счет пользователя. В этой заметке я покажу, можно быстро добавить свои поля на страницу профиля пользователя и сохранить данные в метаполя.
Для этого давайте создадим плагин (или можно добавить этот код в файл темы functions.php, но это не профессионально, потому что при смене темы поля пропадут) и назовем его "Дополнительные поля для профиля". Для этого создайте php файл и добавьте туда такой код:
<?php /* Plugin Name: Дополнительные поля для профиля Description: Добавляет новые поля в профиль пользователя. Version: 1.0 */
Это основа плагина, в котором нет ни строки кода. перейдем к коду.
Для создания дополнительных полей в профиле пользователя нам понадобятся фильтры (события):
Также, нам нужны будут функции для получения/добавления данных в БД:
А сам код плагин будет выглядеть так:
<?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');
Сделал, получилось! Спасибо вам за подробную инструкцию!
Все легко и просто. Вроде получилось. Спасибо
Интересное решение. Как раз недавно искал такое.