# Ajouter des champs au formulaire d’inscription WordPress

> Enrichissez wp-login.php?action=register avec des champs supplémentaires, validez-les et enregistrez-les au bon moment, sans extension d'adhésion complète.

- Auteur : Clément Hadrot
- Publié le : 2026-05-27
- Mis à jour le : 2026-05-27
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/ajouter-champs-formulaire-inscription-wordpress/

## L’essentiel

- Trois hooks pour afficher, valider et enregistrer un champ
- Le formulaire natif reste minimaliste par défaut
- Utile pour un site associatif ou communautaire léger

Un club de randonnée local voulait que ses adhérents s'inscrivent directement sur le site, en renseignant en plus de l'identifiant et du courriel habituels, leur numéro de téléphone et leur groupe de niveau (débutant, confirmé, expert). Installer une extension d'adhésion complète pour ce seul besoin paraissait disproportionné : le formulaire natif de WordPress, accessible via `wp-login.php?action=register`, peut être enrichi directement avec trois hooks dédiés à ce cycle précis.

## Afficher le champ supplémentaire

Le hook `register_form` permet d'injecter du HTML directement dans le formulaire natif, juste avant le bouton d'inscription :

```
add_action( 'register_form', function () {
    $telephone = $_POST['telephone'] ?? '';
    $niveau = $_POST['niveau'] ?? '';
    ?>
    <p>
        <label for="telephone"><?php esc_html_e( 'Téléphone', 'mon-theme' ); ?><br />
        <input type="tel" name="telephone" id="telephone" value="<?php echo esc_attr( $telephone ); ?>" class="input" /></label>
    </p>
    <p>
        <label for="niveau"><?php esc_html_e( 'Niveau de randonnée', 'mon-theme' ); ?><br />
        <select name="niveau" id="niveau">
            <option value="debutant" <?php selected( $niveau, 'debutant' ); ?>>Débutant</option>
            <option value="confirme" <?php selected( $niveau, 'confirme' ); ?>>Confirmé</option>
        </select>
    </p>
    <?php
} );
```

## Valider les champs avant création du compte

Le filtre `registration_errors` permet de refuser l'inscription si un champ obligatoire est absent ou mal formé, avant même que WordPress ne crée le compte :

> L'essentiel à retenir : Trois hooks pour afficher, valider et enregistrer un champ ; Le formulaire natif reste minimaliste par défaut ; Utile pour un site associatif ou communautaire léger

```
add_filter( 'registration_errors', function ( $erreurs, $login_normalise, $email ) {
    if ( empty( $_POST['telephone'] ) ) {
        $erreurs->add( 'telephone_manquant', __( 'Merci d’indiquer votre numéro de téléphone.', 'mon-theme' ) );
    } elseif ( ! preg_match( '/^0[1-9](\d{2}){4}$/', str_replace( ' ', '', $_POST['telephone'] ) ) ) {
        $erreurs->add( 'telephone_invalide', __( 'Le format du numéro de téléphone semble incorrect.', 'mon-theme' ) );
    }

    return $erreurs;
}, 10, 3 );
```

## Enregistrer les champs une fois le compte créé

Une fois l'inscription validée, le hook `user_register` reçoit l'identifiant du nouvel utilisateur et permet d'enregistrer les champs supplémentaires en meta :

```
add_action( 'user_register', function ( $user_id ) {
    if ( ! empty( $_POST['telephone'] ) ) {
        update_user_meta( $user_id, 'telephone', sanitize_text_field( $_POST['telephone'] ) );
    }

    if ( ! empty( $_POST['niveau'] ) ) {
        $niveaux_valides = [ 'debutant', 'confirme' ];
        $niveau = sanitize_text_field( $_POST['niveau'] );

        if ( in_array( $niveau, $niveaux_valides, true ) ) {
            update_user_meta( $user_id, 'niveau_randonnee', $niveau );
        }
    }
} );
```

## Autoriser l'inscription publique si nécessaire

Ce formulaire n'est accessible que si l'option « Tout le monde peut s'inscrire » est activée dans Réglages → Général, ou via la constante correspondante en base. Sans cette option, `wp-login.php?action=register` redirige simplement vers la page de connexion.

```
wp option get users_can_register
wp option update users_can_register 1
```

## Attribuer un rôle adapté plutôt que le rôle par défaut

Par défaut, les inscriptions publiques créent des comptes avec le rôle défini dans l'option `default_role`, généralement `subscriber`. Pour ce club de randonnée, un rôle personnalisé `adherent` avec des capacités propres a été créé via `add_role()`, puis attribué explicitement lors de l'inscription plutôt que de modifier le rôle par défaut du site entier :

```
add_action( 'user_register', function ( $user_id ) {
    $utilisateur = new WP_User( $user_id );
    $utilisateur->set_role( 'adherent' );
} );
```

> Enrichir le formulaire natif d'inscription plutôt que d'installer une extension d'adhésion complète garde le site léger, tant que les besoins restent simples : quelques champs, une validation, un rôle dédié.

## En résumé

Trois hooks natifs, `register_form`, `registration_errors` et `user_register`, couvrent tout le cycle d'un formulaire d'inscription enrichi : affichage, validation et enregistrement. Cette approche reste préférable à une extension d'adhésion complète tant que les champs à ajouter restent en nombre limité et que la logique métier ne dépasse pas ce que quelques hooks peuvent raisonnablement porter.
