20.04.2024

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

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

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

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

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

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