web-dev-qa-db-fra.com

Ajouter un texte de description sous le champ de saisie pour les nouveaux champs de profil

Comment puis-je modifier le code suivant pour ajouter du texte de description sous les champs de saisie? J'ai essayé de le modifier comme vous pouvez le voir avec le champ URL de Facebook, mais le texte apparaît sous le libellé du champ et non le champ de saisie -

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');
2
Rich

Basé sur les informations recueillies ICI et ICI ; J'ai été capable de mettre quelque chose ensemble.

D'abord ... abandonne ta première approche. Cela ajoutera une valeur de champ, oui. Mais cela ne vous permettra pas d'ajouter un champ descriptif.

Au lieu de cela, nous devons créer une nouvelle balise table entière dans la structure renseignée à partir de WordPress. Pour ce faire, utilisons cette fonction:

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' );

Cela définira notre nouvel élément tr et le remplira avec la structure nécessaire. Vous pouvez modifier l’étiquette et la description du champ en fonction de vos besoins.

REMARQUE: cela ne créera que notre nouvel élément tr et placez-le au bas de la section "À propos de vous-même". Afin de "placer" le nouvel élément tr où nous voulons (c'est-à-dire les "informations de contact"), nous devons utiliser un peu de 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' );

Ce code prendra notre nouvel élément tr et l'ajoutera AVANT le champ "WEBSITE" généré par WordPress.

NOTE: Voyez comment nous accrochons à admin_head ici? Nous voulons nous assurer que cela ne fonctionne pas sur toutes les pages d'administration. Ainsi, la première partie de ce bloc de code vérifiera la page actuelle et n'exécutera le code que si nous sommes sur la page de profil.

Maintenant ... c'est génial. Le placement est parfait !! Mais attendez ... maintenant, nos données ne sont pas sauvegardées lorsque nous mettons à jour les champs. Ne vous inquiétez pas !! Nous avons un autre crochet pour cela:

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' );

Cela mettra à jour le champ et le stockera dans la table méta de l'utilisateur. Ensuite, chaque fois que vous devez accéder à cette valeur à partir de votre modèle; utilisez simplement la fonction get_user_meta.

3
josh