web-dev-qa-db-fra.com

Comment ajouter un champ sur le profil des utilisateurs? Par exemple, pays, âge, etc.

Je ne suis pas très bon avec les ordinateurs/codes, etc. J'utilise un plugin qui crée un truc d'enregistrement et c'est sous cette forme que j'ai ajouté le pays, le groupe d'âge, le sexe, etc. Je clique sur l'option qui ajoutera l'enregistreur dans le truc d'utilisateur wordpress. Mais lorsque je l'essaie, seuls le nom d'utilisateur et l'adresse e-mail s'affichent dans la section Utilisateurs du backend. Les autres champs peuvent-ils être affichés dans la section Utilisateurs?

J'ai besoin d'eux pour montrer des utilisations statistiques.

15
Chloe Aus

Vous devez utiliser les points d'ancrage show_user_profile, edit_user_profile, personal_options_update et edit_user_profile_update.

Vous pouvez utiliser le code suivant pour ajouter des champs supplémentaires dans la section Utilisateur

Code pour l'ajout de champs supplémentaires dans la section Modifier l'utilisateur:

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 pour l'enregistrement des détails de champs supplémentaires dans la base de données :

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

Plusieurs articles de blog sur le sujet pourraient également être utiles:

44
Arpita Hunka

Le Advanced Custom Fields plugin vous permettra d’ajouter des champs aux profils d’utilisateur sans codage.

2
squarecandy

Vous feriez mieux d'utiliserget_user_metaau lieu deget_the_author_meta:

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}
2
T.Todua