web-dev-qa-db-fra.com

Champ personnalisé d'enregistrement et de profil

Comment ajouter un champ personnalisé dans le formulaire d'inscription wordpress et l'afficher dans le profil de l'utilisateur dans le backend?

Je l'ai déjà consulté sur Google, mais je viens de trouver comment l'ajouter au profil de l'utilisateur, mais pas au processus d'inscription.

1
Plaz

Je viens de traverser tout ce processus moi-même. Il n'y a pas de crochet ou quoi que ce soit qui facilite cela, alors nous devons plutôt le "pirater" pour le mettre en place. Ce n'est pas joli, mais ça fait le travail. Je l'utilise depuis 3 mois avec 3 champs personnalisés et cela m'a fait gagner beaucoup de temps d'ajouter mes informations d'utilisateur personnalisées dès le début.

Cela ajoutera les champs personnalisés à la page "Add New User" du tableau de bord de l'administrateur. Il ne devrait pas être trop difficile de convertir cela dans la page d’inscription publique si c’est ce que vous essayez de faire.

Ajoutez tout ce code au fichier function.php de votre thème.

Étape 1: Ajoutez les champs à la page Ajouter un utilisateur:

// Add custom field for wp-admin add user page. 
// There is no filter or hook, and this is a hack, but it works. 
function wpse_135622_add_new_user_custom_field_hack(){
    global $pagenow;
    # do this only in page user-new.php
    if($pagenow !== 'user-new.php')
        return;
    # do this only if you can
    if(!current_user_can('manage_options'))
        return false;
    ?>
    <table id="table_custom_field_1" style="display:none;">
    <!-- My Custom Code { -->
        <tr>
            <th><label for="custom_field_1">Custom Field Label</label></th>
            <td><input type="text" name="custom_field_1" id="custom_field_1" /></td>
        </tr>
    <!-- } -->
    </table>
    <script>
    jQuery(function($){
        //Move my HTML code below user's role
        $('#table_custom_field_1 tr').insertBefore($('#role').parentsUntil('tr').parent());
    });
    </script>
    <?php
}
add_action('admin_footer_text', 'wpse_135622_add_new_user_custom_field_hack');

Bien sûr, renommez chaque custom_field_1 que vous envisagez pour quelque chose qui a du sens pour vous. Tels que pets_name ou quelque chose.

Étape 2: Maintenant que le champ est affiché sur le formulaire d'inscription, nous devons l'enregistrer dans la base de données lorsque nous cliquons sur Ajouter un nouvel utilisateur:

// Save custom field
function wpse_135622_save_custom_add_new_user_field_hack($user_id){
    # do this only if you can
    if(!current_user_can('manage_options'))
        return false;

    # save my custom field
    update_usermeta($user_id, 'user_custom_field_1', $_POST['custom_field_1']);
}
add_action('user_register', 'wpse_135622_save_custom_add_new_user_field_hack');

Encore une fois, renommez chaque custom_field_1 pour correspondre à ce que vous avez fait ci-dessus.

Maintenant que c'est sauvegardé, voici comment vous pouvez le voir dans Admin Dashboard> Users:

// Add custom fields to user profile page.
function wpse135622_show_custom_user_fields($profile_fields) {
    $profile_fields['user_custom_field_1'] = 'Custom Field 1';
    return $profile_fields;
}
add_filter('user_contactmethods', 'wpse135622_show_custom_user_fields');

De nouveau, associez le custom_field_1 au nom que vous utilisiez, et Custom Field 1 correspond à l'étiquette que vous souhaitez afficher sur la page de gestion des utilisateurs.

Cela devrait résumer et commencer. Comme elle se trouve maintenant dans la base de données, vous pouvez en faire ce que vous voulez, par exemple l'afficher sur la page d'accueil si l'utilisateur est connecté.

Si cela répond à votre question, veuillez cocher la case correspondante.

2
Pat

Si par "formulaire d'inscription wordpress" vous entendez le formulaire à l'aide de wp-login.php?action=register, alors il y a un crochet qui peut être utilisé pour ajouter des champs sous la ligne "email". Par exemple...

add_action(
  'register_form',
  function() {
    echo 'Here is where the hook fires';
  }
);

Pour enregistrer les données, connectez-vous à user_registercomme dans cet exemple à partir du Codex :

add_action( 'user_register', 'myplugin_registration_save', 10, 1 );

function myplugin_registration_save( $user_id ) {

    if ( isset( $_POST['first_name'] ) )
        update_user_meta($user_id, 'first_name', $_POST['first_name']);

}

Votre question est très peu détaillée, il est donc difficile d’être plus précis.

2
s_ha_dum