12.11.2019

Как добавить дополнительные поля на страницу профиля WordPress

При работе с WordPress нам часто приходится расширять данные пользователей. Например, нужно добавить поле в котором будет записан банковский счет пользователя. В этой заметке я покажу, можно быстро добавить свои поля на страницу профиля пользователя и сохранить данные в метаполя.

Для этого давайте создадим плагин (или можно добавить этот код в файл темы functions.php, но это не профессионально, потому что при смене темы поля пропадут) и назовем его «Дополнительные поля для профиля». Для этого создайте php файл и добавьте туда такой код:





<?php
/*
Plugin Name: Дополнительные поля для профиля
Description: Добавляет новые поля в профиль пользователя.
Version: 1.0
*/

1141″ />Это основа плагина, в котором нет ни строки кода. перейдем к коду.

Для создания дополнительных полей в профиле пользователя нам понадобятся фильтры (события):

  1. show_user_profile — срабатывает в конце страницы профиля.
  2. edit_user_profile — срабатывает в конце страницы редактирования профиля.
  3. personal_options_update — срабатывает при обновлении профиля.
  4. edit_user_profile_update — срабатывает при обновлении редактирования профиля.

Также, нам нужны будут функции для получения/добавления данных в БД:

  1. get_user_meta() — Получает мета поле указанного пользователя.
  2. 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() также подключается к двум фильтрам и обновляет метаполя пользователя, при обновлении страницы профиля.

А вот так это выглядит на странице профиля/редактирования профиля:
Дополнительные поля на странице профиля в админке WordPress

Дополнительные контактные данные

Также, дополнительные поля на страницу профиля можно добавить через фильтр 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 новых поля:

Дополнительные контактные данные в WordPress

Чтобы получить новые поля в шаблоне для вывода, используйте такую функцию get_the_author_meta():

$twitterHandle = get_the_author_meta('twitter');

Spread the love

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *