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


Как я могу изменить свой следующий код, чтобы добавить текст описания в поля ввода? Я попытался изменить его, как вы можете видеть, с помощью поля 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');
Author: brasofilo, 2013-10-17

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.

 3
Author: josh, 2017-04-13 12:37:45