Как передать ошибки кастомной регистрации wp в нужное место?

По инструкции сделал кастомную регистрацию, сделал валидацию сразу на бутстрап форме, но если он проходит валидацию бутстрапа, но не проходит валидацию wp_errors, то ошибки он выставляет просто сверху формы. Как мне вставить ошибки в нужное место т.е. под input где ошибка выходит? либо же как сделать чтобы ошибка выходила после формы а не до формы

function registration_form( $username, $password, $email, $first_name, $last_name ) {
    echo '
    <form action="' . $_SERVER['REQUEST_URI'] . '" method="post" class="needs-validation" novalidate>
        <div class="form-paper">
      <div class="form-title">
 <h1>Регистрация</h1>
  </div>
  <div class="form-group  has-validation">
    <label for="fname" class="form-label">Имя и фамилия</label>
    <input required type="text" class="form-control"  id="fname" name="fname" value="' . ( isset( $_POST['fname']) ? $first_name : null ) . '">
    <div class="invalid-feedback">
        Напишите пожалуйста Имя
      </div>
   
  </div>
  <div class="form-group has-validation">
    <label for="username" class="form-label">Телефон</label>
    <input required type="text" name="username" class="form-control" id="username" value="' . ( isset( $_POST['username'] ) ? $username : null ) . '">
      <div class="invalid-feedback">
        Напишите пожалуйста телефон
      </div>
    </div>
  <div class="form-group has-validation">
    <label for="email" class="form-label">Электронная почта</label>
     <input required type="email" class="form-control" id="email"  name="email" value="' . ( isset( $_POST['email']) ? $email : null ) . '">
       <div class="invalid-feedback">
        Напишите пожалуйста корректную почту
      </div>
    </div>
  <div class="form-group">
    <label for="password" class="form-label">Пароль</label>
    <input required type="password" class="form-control" id="password" name="password" value="' . ( isset( $_POST['password'] ) ? $password : null ) . '">
      <div class="invalid-feedback">
        Напишите пожалуйста пароль
      </div>
   </div>
  <div class="form-group has-validation">
    <label for="lname" class="form-label">Название компании</label>
    <input required type="text" class="form-control" id="lname" name="lname" value="' . ( isset( $_POST['lname']) ? $last_name : null ) . '">
      <div class="invalid-feedback">
        Напишите пожалуйста название компании
      </div>
  </div>

 <input type="submit" name="submit" class="btn btn-primary" value="Зарегистрироваться">
   <div class="checker"><span><a href="/login">Войдите</a>, если уже зарегистрированы</span></div>
  </div>
  
</form>';
}
function registration_validation( $username, $password, $email, $first_name, $last_name )  {
    global $reg_errors;
$reg_errors = new WP_Error;
if ( empty( $username ) || empty( $password ) || empty( $email ) ) {
    $reg_errors->add('field', 'Обязательное поле');
}

if ( username_exists( $username ) )
    $reg_errors->add('user_name', 'Извините, уже занято!!');
    

if ( 5 > strlen( $password ) ) {
        $reg_errors->add( 'password', 'Пароль должен быть больше 5 символов' );
    }
if ( !is_email( $email ) ) {
    $reg_errors->add( 'email_invalid', 'Неправильная почта' );
}    
if ( email_exists( $email ) ) {
    $reg_errors->add( 'email', 'Email уже существует' );
}

if ( is_wp_error( $reg_errors ) ) {

    foreach ( $reg_errors->get_error_messages() as $error ) {

        echo '<div>';
        echo '<strong>ERROR</strong>:';
        echo $error . '<br/>';
        echo '</div>';

    }

}
}
function complete_registration() {
    global $reg_errors, $username, $password, $email, $first_name, $last_name;
    if ( 1 > count( $reg_errors->get_error_messages() ) ) {
        $userdata = array(
        'user_login'    =>   $username,
        'user_email'    =>   $email,
        'user_pass'     =>   $password,
        'first_name'    =>   $first_name,
        'last_name'     =>   $last_name,

        );
        $user = wp_insert_user( $userdata );
 
    }
}
function custom_registration_function() {
    if ( isset($_POST['submit'] ) ) {
        registration_validation(
        $_POST['username'],
        $_POST['password'],
        $_POST['email'],
        $_POST['fname'],
        $_POST['lname']
        );

        // проверка безопасности введенных данных
        global $username, $password, $email, $first_name, $last_name;
        $value = sanitize_user( $_POST['username'] );
        $uesrok = preg_replace('/[^0-9]/', '', $value);
        $username   =   $uesrok;
        $password   =   esc_attr( $_POST['password'] );
        $email      =   sanitize_email( $_POST['email'] );
        $first_name =   sanitize_text_field( $_POST['fname'] );
        $last_name  =   sanitize_text_field( $_POST['lname'] );


        // вызов @function complete_registration, чтобы создать пользователя
        // только если не обнаружено WP_error
        complete_registration(
        $username,
        $password,
        $email,
        $first_name,
        $last_name
        );
        
    }
    

    registration_form(
        $username,
        $password,
        $email,
        $first_name,
        $last_name
        );
}
// Регистрируем новый шорткод: [cr_custom_registration]
add_shortcode( 'cr_custom_registration', 'custom_registration_shortcode' );

// Обратный вызов функции, которая заменит [book]
function custom_registration_shortcode() {
    ob_start();
    custom_registration_function();
    return ob_get_clean();
}

Ответы (0 шт):