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

Додаємо свої додаткові поля в профілі користувачів

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

Доброго вам дня.

Сьогодні хочу показати вам, як додати свої поля в профіль користувача 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