Как добавить поле в профиль пользователя?Например, страна, возраст и т. Д.
-
-
Пожалуйста,попробуйте наш поиск.Вы найдете десятки примеров.Please try our search. You will find dozens of examples.
- 5
- 2016-01-16
- fuxia
-
3 ответ
- голосов
-
- 2016-01-16
Вам необходимо использовать хуки
show_user_profile
,edit_user_profile
,personal_options_update
иedit_user_profile_update
.Вы можете использовать следующий код для добавления дополнительных полей в раздел "Пользователь"
Код для добавления дополнительных полей в раздел редактирования пользователя:
add_action( 'show_user_profile', 'extra_user_profile_fields' ); add_action( 'edit_user_profile', 'extra_user_profile_fields' ); function extra_user_profile_fields( $user ) { ?> <h3><?php _e("Extra profile information", "blank"); ?></h3> <table class="form-table"> <tr> <th><label for="address"><?php _e("Address"); ?></label></th> <td> <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e("Please enter your address."); ?></span> </td> </tr> <tr> <th><label for="city"><?php _e("City"); ?></label></th> <td> <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e("Please enter your city."); ?></span> </td> </tr> <tr> <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th> <td> <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e("Please enter your postal code."); ?></span> </td> </tr> </table> <?php }
Код для сохранения деталей дополнительных полей в базе данных :
add_action( 'personal_options_update', 'save_extra_user_profile_fields' ); add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' ); function save_extra_user_profile_fields( $user_id ) { if ( !current_user_can( 'edit_user', $user_id ) ) { return false; } update_user_meta( $user_id, 'address', $_POST['address'] ); update_user_meta( $user_id, 'city', $_POST['city'] ); update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] ); }
Есть также несколько сообщений в блогах по этой теме,которые могут быть полезны:
You need to use the
show_user_profile
,edit_user_profile
,personal_options_update
, andedit_user_profile_update
hooks.You can use the following code for adding additional fields in User section
Code for adding extra fields in Edit User Section:
add_action( 'show_user_profile', 'extra_user_profile_fields' ); add_action( 'edit_user_profile', 'extra_user_profile_fields' ); function extra_user_profile_fields( $user ) { ?> <h3><?php _e("Extra profile information", "blank"); ?></h3> <table class="form-table"> <tr> <th><label for="address"><?php _e("Address"); ?></label></th> <td> <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e("Please enter your address."); ?></span> </td> </tr> <tr> <th><label for="city"><?php _e("City"); ?></label></th> <td> <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e("Please enter your city."); ?></span> </td> </tr> <tr> <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th> <td> <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e("Please enter your postal code."); ?></span> </td> </tr> </table> <?php }
Code for saving extra fields details in database:
add_action( 'personal_options_update', 'save_extra_user_profile_fields' ); add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' ); function save_extra_user_profile_fields( $user_id ) { if ( !current_user_can( 'edit_user', $user_id ) ) { return false; } update_user_meta( $user_id, 'address', $_POST['address'] ); update_user_meta( $user_id, 'city', $_POST['city'] ); update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] ); }
There are also several blog posts available on the subject that might be helpful:
-
Браво,это отлично работает.Bravo this works great.
- 0
- 2018-03-15
- AVEbrahimi
-
Это не сохраняет данные из моих дополнительных полей в БД.Предложения,пожалуйста?Спасибо.This isn't storing data from my extra fields in the DB. Suggestions please? Thx.
- 1
- 2019-07-03
- b_dubb
-
@b_dubb,подскажите пожалуйста свой код?Так что я проверю и дам вам знать.@b_dubb, Can you please share your code? So i'll check and let you know.
- 0
- 2019-08-02
- Arpita Hunka
-
Я решил проблему,но спасибо за обращение.I have resolved my issue but thanks for reaching out.
- 0
- 2019-08-05
- b_dubb
-
К этому следует добавить проверкуnonce,чтобы избежать появления уязвимостей в системе безопасности.https://developer.wordpress.org/themes/theme-security/using-nonces/You should add nonce verification to this to avoid introducing security vulnerabilities. https://developer.wordpress.org/themes/theme-security/using-nonces/
- 1
- 2020-01-30
- squarecandy
-
- 2017-09-20
Плагин Advanced Custom Fields Pro позволит вам добавлять поля в профили пользователей без какого-либо кодирования..
The Advanced Custom Fields Pro plugin will allow you to add fields to user profiles without any coding.
-
Только про версияOnly the pro version
- 3
- 2019-03-04
- I am the Most Stupid Person
-
Есть бесплатные способы сделать это с помощью PHP.There are free ways of doing this with PHP.
- 2
- 2019-10-15
- Drmzindec
-
Да - определенно можно закодировать это на PHP без ACF,если хотите.Мой опыт показывает,что для этого требуется более 100 строк кода,и вам нужно беспокоиться о проверкеnonce,написании HTML формы и т. Д. Может потребоваться несколько часов кодирования по сравнению с 5-10 минутами настройки в ACF.Вероятно,зависит от того,используете ли вы ACF Pro уже в проекте.Yep - definitely possible to code this in PHP without ACF if you prefer. My experience is that it takes 100+ lines of code and you need to worry about nonce verification, writing the HTML of the form, etc. Could take a few hours of coding vs. 5-10 min of setup in ACF. Probably depends on if you're using ACF Pro already on a project.
- 0
- 2019-10-15
- squarecandy
-
Wordpress должен делать это,не прося вас жестко кодировать html-формы вphp.У меня второй АКФ,он должен быть частью ядра.Вы также можете определить поля с помощью кода и его версии.Wordpress should do this without asking you to hardcode html forms in php. I second ACF, it should be part of the core. You can also define fields with code and version it.
- 2
- 2020-01-30
- marek.m
-
- 2018-12-04
Вам лучше использовать
get_user_meta
(вместоget_the_author_meta
):function extra_user_profile_fields( $user ) { $meta = get_user_meta($user->ID, 'meta_key_name', false); }
You'd better use
get_user_meta
(instead ofget_the_author_meta
):function extra_user_profile_fields( $user ) { $meta = get_user_meta($user->ID, 'meta_key_name', false); }
-
оба работают без проблем!both works with no problems!
- 0
- 2020-08-18
- Fernando Baltazar
Я не очень разбираюсь в компьютерах,кодах и т. д. Я использую плагин,который делает регистрационную форму вещью,и в этой форме я добавил страну,возрастную группу,пол и так далее.Я выбираю вариант,который добавит регистратор в пользовательскую штуку WordPress.Но когда я пробую это сделать,в разделе «Пользователи» серверной части отображаются только имя пользователя и адрес электронной почты. Есть ли способ,чтобы другие поля отображались в разделе пользователей?
Мне нужно их показать для статистических целей.