Вопрос или проблема
Я успешно интегрировал этот код в 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: Добавление валидации и сохранение данных
Если вы уже добавили код для валидации и сохранения пользовательских метаданных, как вы указали, он будет работать и для кастомной регистрации, так как вы используете тот же метод для обработки формы. Убедитесь, что ваша обработка формы правильно настроена для обработки данных из модального окна.
Рекомендуемые шаги по тестированию
- Проверьте, что селектор ролей отображается в вашем модальном окне.
- Убедитесь, что выбранная роль корректно сохраняется в метаданных пользователя после регистрации.
- Протестируйте валидацию на пустое поле для роли, чтобы убедиться, что ошибки отображаются как положено.
Заключение
Следуя данным шагам, вы сможете успешно интегрировать селектор ролей в модальное окно регистрации вашего специализированного WordPress сайта. Важно обеспечить, чтобы вся функциональность работала корректно как на стандартной странице регистрации, так и в вашей кастомной реализации. Рекомендуется также тестировать на разных устройствах и браузерах, чтобы убедиться в кросс-браузерной совместимости.
Если возникнут дополнительные вопросы или будут возникать проблемы, не стесняйтесь обращаться за помощью снова!