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