Дополнительные поля пользователей в WordPress

Код для визуализации полей:

// когда пользователь сам редактирует свой профиль
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>';
 
}

Код для сохранения данных полей:

// когда пользователь сам редактирует свой профиль
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' ] ) );
 
}

Источник: https://misha.agency/wordpress/custom-user-profile-fields.html