Дизайн та розробка сайту

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

только зарегистрированным пользователям

Доброго времени суток

Сегодня хочу показать вам, как добавить свои поля в профиль пользователя WordPress. Думаю, данный материал будет полезен для тех, кто занимается разработкой своих тем или пытается улучшить или расширить возможности установленных на сайте тем.

только зарегистрированным пользователям

У меня на сайте уже есть статьи по добавлению своих полей в настройки / редактор категорий - Как добавить на страницу редактирования рубрик, меток и других таксономий свои поля в WordPress. Материал данной статьи похож, суть такая же. Чтобы это сделать, нужно добавить код в файл функций вашей темы - function.php. Добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было. Так же, можете использовать дочернюю тему. Если вы не знаете что это такое, то ознакомьтесь со статьей - Дочерние темы WordPress.

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

add_action( 'show_user_profile', 'additional_fields_profile' );
add_action( 'edit_user_profile', 'additional_fields_profile');

Далее надо добавить саму функцию с названием additional_fields_profile. Можете назвать по своему, но тогда замените выше в событии тоже.

function additional_fields_profile($user ){
 echo '<h3>Дополнительная информация</h3>';
 echo '<table class="form-table">';

 	// добавляем поле должность обычний input (position)
	$user_position = get_the_author_meta( 'position', $user->ID );
 	echo '<tr><th><label for="position">Должность</label></th>
		<td><input type="text" name="position" id="position" value="' . esc_attr( $user_position ) . '" class="regular-text" /></td>
	</tr>';
	
	// добавляем радиокнопки - Образование (education)
	$education = ( $education = get_the_author_meta( 'education', $user->ID ) ) ? $education : 'Higher';
 	echo '<tr><th><label for="education">Образование</label></th>
 		<td><ul>
 			<li><label><input value="higher" name="education"' . checked( $education, 'higher', false ) . ' type="radio" />Высшее</label></li>
 			<li><label><input value="secondary" name="education"' . checked( $education, 'secondary', false ) . ' type="radio" /> Среднее</label></li>
			<li><label><input value="elementary" name="education"' . checked( $education, 'elementary', false ) . ' type="radio" /> Начальное/label></li>
 		</ul></td>
 	</tr>';
	
	// добавляем чекбокс - Опыт работы (experience)
	$experience = get_user_meta( $user->ID, 'experience', true);
	echo '<tr><th><label for="experience">Опыт работы</label></th>
			<td><input value="1" name="experience"';
	echo ($experience == '1') ? ' checked="checked"' : '';
	echo 'type="checkbox" /></td></tr>';
	
	
 	// добавляем поле textarea Вид деятельности (fulldesc)
	$fulldesc = get_the_author_meta( 'fulldesc', $user->ID );
 	echo '<tr><th><label for="fulldesc"> Вид деятельности</label></th>
		<td><textarea type="text" name="fulldesc" id="fulldesc" class="regular-text" rows="10" cols="45" />' . esc_attr( $fulldesc ) . '</textarea></td>
	</tr>';

 	echo '</table>';
}

Чтобы данные с этих полей сохранялись в базе данных, нужно добавить еще одну функцию save_additional_fields_profile и повесить ее на событие по сохранению и созданию профиля пользователя. В данной функции сохраняется содержимое 4 видов полей.

add_action( 'personal_options_update', 'save_additional_fields_profile' );
add_action( 'edit_user_profile_update', 'save_additsional_fields_profile' );
 
function save_additional_fields_profile( $user_id ) {
	update_user_meta( $user_id, 'position', $_POST[ 'position' ] );
	update_user_meta( $user_id, 'education', $_POST[ 'education' ] );
	update_user_meta( $user_id, 'experience', $_POST[ 'experience' ] );
	update_user_meta( $user_id, 'fulldesc', $_POST[ 'fulldesc' ] );
}

По функциям вы можете увидеть, что мы добавляем обычное поле ввода, радиокнопки, чекбокс и текстовую область. Если что-то не нужно, можете вырезать часть кода, только аккуратно, в обеих функциях.

На этом все, спасибо за внимание. 🙂

Дизайн та розробка сайту

Back to top