Добавьте текст описания в поле ввода для новых полей профиля
Как я могу изменить свой следующий код, чтобы добавить текст описания в поля ввода? Я попытался изменить его, как вы можете видеть, с помощью поля 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');
1 answers
Основываясь на информации, собранной ЗДЕСЬ и ЗДЕСЬ ; Я смог кое-что собрать.
Во-первых... откажитесь от своего первого подхода. Это добавит значение поля, да. Но это не позволит вам добавить описательное поле.
Вместо этого нам нужно создать совершенно новый тег 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
.