web-dev-qa-db-fra.com

Enregistrer le formulaire: ajouter un champ personnalisé AVANT les champs par défaut

Je sais comment ajouter un champ personnalisé à WP enregistrer le formulaire via hook de register_form. Mais cela ajoute le nouveau champ à la fin du formulaire. Comment pourrais-je déplacer ce champ au début du formulaire?

Exemple:

function mytheme_register_form() 
{
    $first_name = ( ! empty( $_POST['first_name'] ) ) ? trim( $_POST['first_name'] ) : '';

    ?>
    <p>
        <label for="first_name"><?php _e( 'Your name', 'mytheme' ) ?><br />
            <input type="text" name="first_name" id="first_name" class="input" value="<?php echo esc_attr( wp_unslash( $first_name ) ); ?>" size="25" />
        </label>
           </p>
    <?php
}
add_action( 'register_form', 'mytheme_register_form' );

https://codex.wordpress.org/Plugin_API/Action_Reference/register_form

1
trainoasis

Vous ne pouvez pas, à cause de la structure wp-login.php. Voici le code avec le crochet register_form:

<form name="registerform" id="registerform" action="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login_post' ) ); ?>" method="post" novalidate="novalidate">
    <p>
        <label for="user_login"><?php _e('Username') ?><br />
        <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label>
    </p>
    <p>
        <label for="user_email"><?php _e('Email') ?><br />
        <input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr( wp_unslash( $user_email ) ); ?>" size="25" /></label>
    </p>
    <?php
    /**
     * Fires following the 'Email' field in the user registration form.
     *
     * @since 2.1.0
     */
    do_action( 'register_form' );
    ?>
    <p id="reg_passmail"><?php _e( 'Registration confirmation will be emailed to you.' ); ?></p>
    <br class="clear" />
    <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
    <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Register'); ?>" /></p>
</form>
0
Krzysztof Grabania

Je viens de trouver un moyen d'accomplir cela.

Sur la page register_form , il y a un deuxième exemple (après l'exemple que vous avez donné) qui concerne la modification du formulaire de registre à l'aide de la mise en mémoire tampon de sortie. L'exemple contient des fautes de frappe et ne fonctionnera pas, mais nous pouvons utiliser l'idée.

Le code suivant devrait fonctionner:

function my_register_form() {

   $content = ob_get_contents();
   $my_content = '<label for="first_name">First name<br />
                    <input type="text" name="first_name" id="first_name" class="input" value="" size="25" />
                    </label>
                    </p><p>
                    <label for="user_login">';
   $content = str_replace ( '<label for="user_login">', $my_content, $content );

   ob_get_clean();
   echo $content;
}
add_action( 'register_form', 'my_register_form' );
0
Betty