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

Как я могу изменить свой следующий код, чтобы добавить текст описания в поля ввода? Я попытался изменить его, как вы можете видеть в поле url facebook, но текст отображается под меткой поля, а не с фактическим полем ввода –

function modify_contact_methods($profile_fields) { // Add new fields $profile_fields['address'] = 'Address'; $profile_fields['city'] = 'City'; $profile_fields['state'] = 'State'; $profile_fields['zipcode'] = 'Zip Code'; $profile_fields['phone'] = 'Phone Number'; $profile_fields['fax'] = 'Fax'; $profile_fields['gplus'] = 'Google+ URL'; $profile_fields['twitter'] = 'Twitter URL'; $profile_fields['facebook'] = 'Facebook URL <br /><span style="clear:both;">Ex: www.facebook.com/username</span>'; // Remove old fields unset($profile_fields['aim']); unset($profile_fields['yim']); unset($profile_fields['jabber']); return $profile_fields; } add_filter('user_contactmethods', 'modify_contact_methods'); 

На основании собранной информации ЗДЕСЬ и ЗДЕСЬ ; Мне удалось собрать что-то вместе.

Сначала … отказаться от своего первого подхода. Да, это добавит значение поля. Но это не позволит вам добавить описательное поле.

Вместо этого нам нужно создать целый новый тег table в структуре, которая заполняется из WordPress. Для этого воспользуемся этой функцией:

 function my_custom_user_profile_fields( $user ) { ?> <table id="facebook_user_field_table" class="form-table"> <tr id="facebook_user_field_row"> <th> <label for="facebook_field"><?php _e('Facebook URL', 'your_textdomain'); ?></label> </th> <td> <input type="text" name="facebook_field" id="facebook_field" value="<?php echo esc_attr( get_the_author_meta( 'facebook_field', $user->ID ) ); ?>" class="regular-text" /><br /> <span class="description"><?php _e('Please enter your Facebook profile url.', 'your_textdomain'); ?></span> </td> </tr> </table> <?php } add_action( 'show_user_profile', 'my_custom_user_profile_fields' ); add_action( 'edit_user_profile', 'my_custom_user_profile_fields' ); 

Это определит наш новый элемент tr и заполнит его необходимой структурой. Вы можете изменить ярлык и описание поля в соответствии с вашими потребностями.

ПРИМЕЧАНИЕ. Это создаст новый элемент tr и поместит его в нижней части раздела «О себе». Чтобы «разместить» новый элемент tr где мы хотим (например, «Контактная информация»), мы должны использовать немного jQuery:

 function my_facebook_field_placement_js() { $screen = get_current_screen(); if ( $screen->id != "profile" && $screen->id != "user-edit" ) return; ?> <script type="text/javascript"> jQuery(document).ready(function($) { field = $('#facebook_user_field_row').remove(); parent = $('#url').closest('tr'); field.insertBefore(parent); }); </script> <?php } add_action( 'admin_head', 'my_facebook_field_placement_js' ); 

Этот код примет наш новый tr элемент и добавит его перед полем «ВЕБ-САЙТ», созданным WordPress.

ПРИМЕЧАНИЕ. Посмотрите, как мы подключаемся к admin_head здесь? Мы хотим убедиться, что это не выполняется на каждой странице администратора. Итак, первая часть этого кодового блока проверит текущую страницу и запустит код только в том случае, если мы находимся на странице профиля.

Теперь … это здорово. Размещение идеально! Но подождите … теперь наши данные не сохраняются при обновлении полей. Не волнуйся! У нас есть еще один крючок для этого:

 function my_save_custom_user_profile_fields( $user_id ) { if ( !current_user_can( 'edit_user', $user_id ) ) return FALSE; update_user_meta( $user_id, 'facebook_field', $_POST['facebook_field'] ); } add_action( 'personal_options_update', 'my_save_custom_user_profile_fields' ); add_action( 'edit_user_profile_update', 'my_save_custom_user_profile_fields' ); 

Это обновит поле и сохранит его в метатеге пользователя. Затем, когда вам нужно получить доступ к этому значению из вашего шаблона; просто используйте функцию get_user_meta .