В этом уроке я покажу вам два способа добавления каких-либо дополнительных полей в профили пользователей в админке 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_FieldsContainer; use Carbon_FieldsField; 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:
Также у меня на сайте есть отдельный урок про добавление полей в блок «Контакты».