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

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

В результате этого урока на странице профиля появятся два поля – Город и Пол.

Добавляем поля в профили пользователей WordPress
На скриншоте мы добавили новый блок «Дополнительная информация» и два поля под ним – обычное текстовое и радио-кнопки.

Также напоминаю вам про свой видеокурс про натяжку готовой вёрстки на WordPress. Раньше я вёл его только оффлайн, а теперь он доступен на моём сайте!

Способ 1. Добавляем поля при помощи кода в functions.php (Без плагинов)

Добавление полей:

// когда пользователь сам редактирует свой профиль
add_action( 'show_user_profile', 'true_show_profile_fields' );
// когда чей-то профиль редактируется админом например
add_action( 'edit_user_profile', 'true_show_profile_fields' );
 
function true_show_profile_fields( $user ) {
 
	// выводим заголовок для наших полей
 	echo '<h3>Дополнительная информация</h3>';
 
	// поля в профиле находятся в рамметке таблиц <table>
 	echo '<table class="form-table">';
 
 	// добавляем поле город
	$user_city = get_the_author_meta( 'city', $user->ID );
 	echo '<tr><th><label for="city">Город</label></th>
 	<td><input type="text" name="city" id="city" value="' . esc_attr( $user_city ) . '" class="regular-text" /></td>
	</tr>';
 
	// добавляем поле пол
	// также можно и установить значение по умолчанию
	$gender = ( $gender = get_the_author_meta( 'gender', $user->ID ) ) ? $gender : 'male';
 	echo '<tr><th><label for="gender">Пол</label></th>
 		<td><ul>
 			<li><label><input value="male" name="gender"' . checked( $gender, 'male', false ) . ' type="radio" /> мужской</label></li>
 			<li><label><input value="female" name="gender"' . checked( $gender, 'female', false ) . ' type="radio" /> женский</label></li>
			<li><label><input value="other" name="gender"' . checked( $gender, 'other', false ) . ' type="radio" /> другое</label></li>
 		</ul></td>
 	</tr>';
 
 	echo '</table>';
 
}

Можете почитать подробнее про функции, которые мы использовали в коде: get_the_author_meta(), esc_attr() и checked().

Также, если не знаете, куда вставлять код.

Но это ещё не всё – поля нужно сохранять ведь ещё.

// когда пользователь сам редактирует свой профиль
add_action( 'personal_options_update', 'true_save_profile_fields' );
// когда чей-то профиль редактируется админом например
add_action( 'edit_user_profile_update', 'true_save_profile_fields' );
 
function true_save_profile_fields( $user_id ) {
 
	update_user_meta( $user_id, 'city', sanitize_text_field( $_POST[ 'city' ] ) );
	update_user_meta( $user_id, 'gender', sanitize_text_field( $_POST[ 'gender' ] ) );
 
}

И ещё один момент – в интернете встречал много примеров, в которых в функцию сохранения полей добавляются дополнительные условия типа current_user_can( 'edit_user', $user_id ) или nonce-проверки. Ребят, не нужно! В файле, где задействуются фильтры personal_options_update и edit_user_profile_update уже есть все эти проверки!

Для получения значения пользовательских полей на сайте можете воспользоваться также функцией get_the_author_meta() или get_user_meta().

Способ 2. Добавляем поля при помощи плагина Carbon Fields

По плагину Carbon Fields прежде всего рекомендую вам своё руководство. Если вкратце, то он позволяет создавать поля со значительно меньшим количеством кода.

Например для создания тех же самых полей нам будет достаточно этого кода:

use Carbon_Fields\Container;
use Carbon_Fields\Field;
 
add_action( 'carbon_fields_register_fields', 'truemisha_carbon' );
function truemisha_carbon() {
 
	Container::make( 'user_meta', 'Дополнительная информация' )
		->add_fields( array(
			Field::make( 'text', 'city', 'Город' ),
			Field::make( 'radio', 'gender', 'Пол' )
			->set_options( array(
				'female' => 'Женский',
				'male' => 'Мужской',
				'other' => 'Другое'
			) )
			->set_default_value( 'female' )
		) );
 
}

Единственный момент – все поля, которые добавляет плагин Carbon Fields, являются защищёнными полями, то есть, если будете использовать стандартные функции WordPress для их получения, то перед ключом произвольного поля надо будет добавить знак нижнего подчеркивания _, вот пример:

$user_city = get_the_author_meta( '_city', $user_id );
$user_city = get_user_meta( $user_id, '_city', true );
$user_city = carbon_get_user_meta( $user_id,'city' );

А вот как выглядят поля, добавленные через Carbon Fields:

Добавление полей в профили пользователей при помощи плагина Carbon Fields
Думаю тут важно также отметить, что Carbon Fields добавляет эти поля и на страницу регистрации пользователя также.

Также у меня на сайте есть отдельный урок про добавление полей в блок «Контакты».

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Комментарии — 14

Комментирование этого поста более не доступно.