web-dev-qa-db-ja.com

フォームを登録する:デフォルトフィールドの前にカスタムフィールドを追加する

Register_formフックを介してWP register formにカスタムフィールドを追加する方法を知っています。しかし、これはフォームの最後に新しいフィールドを追加します。フォームの最初にこのフィールドを移動するにはどうすればよいでしょうか。

例:

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

wp-login.php構造のため、できません。これが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

これを達成する方法を考え出したところです。

register_form ページには、出力バッファリングを使用してレジスタ形式を変更する方法についての2番目の例があります。例には実際にいくつかの誤字があり、機能しませんが、私たちはアイデアを使うことができます。

次のコードは動作するはずです。

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