Добавить выбор роли на страницу пользовательской регистрации

Вопрос или проблема

Я успешно интегрировал этот код в functions.php

//1. Добавить новый элемент формы...
add_action( 'register_form', 'myplugin_register_form' );
function myplugin_register_form() {

global $wp_roles;

echo '<label for="role">Тип клиента</label>';
echo '<select name="role" class="input">';
foreach ( $wp_roles->roles as $key=>$value ) {
   // Исключить стандартные роли, такие как администратор и т.д. Добавьте свои
   if ( in_array( $value['name'], [ 'Client', 'Entreprise'] )) {
      echo '<option value="'.$key.'">'.$value['name'].'</option>';
   }
}
echo '</select>';
}

//2. Добавить валидацию.
add_filter( 'registration_errors', 'myplugin_registration_errors', 10, 3 );
function myplugin_registration_errors( $errors, $sanitized_user_login, $user_email ) {

if ( empty( $_POST['role'] ) || ! empty( $_POST['role'] ) && trim( $_POST['role'] ) == '' ) {
     $errors->add( 'role_error', __( '<strong>ОШИБКА</strong>: Вы должны указать роль.', 'mydomain' ) );
}

return $errors;
}

//3. Наконец, сохранить нашу дополнительную метаинформацию пользователя при регистрации.
add_action( 'user_register', 'myplugin_user_register' );
function myplugin_user_register( $user_id ) {

$user_id = wp_update_user( array( 'ID' => $user_id, 'role' => $_POST['role'] ) );
}

и это работает, как ожидалось, на странице регистрации по умолчанию WP.

Тема, которую я использую для моего проекта, имеет пользовательское модальное окно для входа/регистрации, и я хотел бы, чтобы этот код работал и в этом окне.

Смотреть стандартное окно регистрации: https://capricesdelectables.com/wp-login.php?action=register

Смотреть пользовательское окно входа: https://capricesdelectables.com (нажмите на красную ссылку “Connexion” в правом верхнем углу)

Это модальное окно шаблонизировано в конкретном файле mytheme-login.php

Как мне вызвать код из functions.php, чтобы он отображался в этом модальном окне?

Спасибо

Поскольку это индивидуальная функциональность для конкретной темы, вам нужно будет либо использовать пользовательские хуки, которые автор темы включил в разметку для этого модального окна (маловероятно), либо обратиться непосредственно к автору темы с вопросом, либо создать дочернюю тему, чтобы вы могли редактировать этот файл, не опасаясь, что он будет перезаписан при обновлении темы. Я бы выбрал вариант с дочерней темой: https://codex.wordpress.org/Child_Themes

Ответ или решение

Чтобы добавить селектор роли на страницу кастомной регистрации в модальном окне вашего сайта WordPress, вам необходимо внести изменения в файл вашей темы mytheme-login.php, который отвечает за отображение этого окна. Предполагается, что у вас уже есть код для добавления ролей на стандартной странице регистрации, как вы указали.

Шаг 1: Создание функции для отображения селектора

Во-первых, вам нужно создать функцию, которая будет выводить селектор ролей. Предположим, что вы уже добавили этот код в ваш файл functions.php, как вы его привели в вопросе. Скорее всего, вам нужно будет адаптировать его для использования в вашем модальном окне.

Добавьте следующий код в ваш файл functions.php, если его еще нет:

// Добавить новый элемент формы
function myplugin_register_form_custom() {
    global $wp_roles;

    echo '<label for="role">Тип клиента</label>';
    echo '<select name="role" class="input">';
    foreach ( $wp_roles->roles as $key => $value ) {
        // Исключите стандартные роли, такие как администратор и т.д.
        if ( in_array( $value['name'], [ 'Client', 'Entreprise'] )) {
            echo '<option value="'.$key.'">'.$value['name'].'</option>';
        }
    }
    echo '</select>';
}

Шаг 2: Изменение файла mytheme-login.php

Теперь вам нужно интегрировать эту функцию в файл mytheme-login.php. Найдите место, где вы хотите отобразить селектор ролей, и вызовите новую функцию. Например:

<div class="modal-content">
    <form action="" method="post">
        <!-- Другие поля формы -->
        <?php myplugin_register_form_custom(); ?>
        <!-- Кнопка отправки формы -->
        <input type="submit" value="Зарегистрироваться">
    </form>
</div>

Таким образом, ваш селектор ролей будет отображаться в модальном окне.

Шаг 3: Добавление валидации и сохранение данных

Если вы уже добавили код для валидации и сохранения пользовательских метаданных, как вы указали, он будет работать и для кастомной регистрации, так как вы используете тот же метод для обработки формы. Убедитесь, что ваша обработка формы правильно настроена для обработки данных из модального окна.

Рекомендуемые шаги по тестированию

  1. Проверьте, что селектор ролей отображается в вашем модальном окне.
  2. Убедитесь, что выбранная роль корректно сохраняется в метаданных пользователя после регистрации.
  3. Протестируйте валидацию на пустое поле для роли, чтобы убедиться, что ошибки отображаются как положено.

Заключение

Следуя данным шагам, вы сможете успешно интегрировать селектор ролей в модальное окно регистрации вашего специализированного WordPress сайта. Важно обеспечить, чтобы вся функциональность работала корректно как на стандартной странице регистрации, так и в вашей кастомной реализации. Рекомендуется также тестировать на разных устройствах и браузерах, чтобы убедиться в кросс-браузерной совместимости.

Если возникнут дополнительные вопросы или будут возникать проблемы, не стесняйтесь обращаться за помощью снова!

Оцените материал
Добавить комментарий

Капча загружается...