Intereting Posts
Несколько операторов if с else для get_the_category Создание кнопки «Назад» на дополнительной почтовой странице для возврата на страницу блога с теми же строками запроса и идентификатором страницы Более эффективный запрос для отображения сообщений в одной и той же подкатегории? WP_Query с различным фильтром postmeta для каждой категории Удаление данных из пользовательской таблицы в wordpress Код вставки в заголовок моего шаблона load_plugin_textdomain doestn't не работает с add_action plugins_loaded Как добавить условные скрипты IE9 к функциям.php Как найти вредоносную ссылку на веб-сайте wp Пользовательские типы сообщений, работающие в functions.php, но не в плагине Изменение шрифта и размера редактора WP по умолчанию Пользовательское поле не обновляется через функции при публикации Как добавить php в пользовательскую ссылку в навигационном меню? Не удается отобразить комментарий на странице Как добавить второй раздел контента при использовании определенного шаблона страницы

Фильтрация и проверка роли пользователя в регистрации

Я хочу показать окно выбора для ролей пользователя в регистрационной форме. Я использую эту модель:

/* ROLES IN LIST REGISTRATION */ // 1. Add a new form element... add_action( 'register_form', 'odin_register_form' ); function odin_register_form() { global $wp_roles; echo '<select name="role" class="input">'; echo '<option disabled selected value> -- </option>'; foreach ( $wp_roles->roles as $key=>$value ): echo '<option value="'.$key.'">'.$value['name'].'</option>'; endforeach; echo '</select>'; } // 2. Add validation. add_filter( 'registration_errors', 'odin_registration_errors', 10, 3 ); function odin_registration_errors( $errors, $sanitized_user_login, $user_email ) { if ( empty( $_POST['role'] ) || ! empty( $_POST['role'] ) && trim( $_POST['role'] ) == '' || $_POST['role'] == 'administrator' || $_POST['role'] == 'editor' || $_POST['role'] == 'contributor' || $_POST['role'] == 'author' || $_POST['role'] == 'shop_manager' ) { $errors->add( 'role_error', __( '<strong>ERROR</strong>: Select a valid option.', 'odin' ) ); } return $errors; } //3. Finally, save our extra registration user meta. add_action( 'user_register', 'odin_user_register' ); function odin_user_register( $user_id ) { if ( $_POST['role'] != 'administrator' || $_POST['role'] != 'editor' || $_POST['role'] != 'contributor' || $_POST['role'] != 'shop_manager' || $_POST['role'] != 'author' ) { $user_id = wp_update_user( array( 'ID' => $user_id, 'role' => $_POST['role'] ) ); } } 

Дело в том, что я не видел, чтобы ошибка произошла, когда валидация выбрала пустую опцию.

Итак, что я alncançar выглядит следующим образом:

1) Отфильтруйте типы пользователей, кроме Администратора, Редактора, Автор, Участник и Менеджер магазина. Я мог бы просто настроить функции Subscriber и Customer, но проект должен быть свободен для создания других ролей без необходимости повторного написания кода.

2) Мне нужно проверить запись опций в этом поле, потому что она уже добилась фильтрования рендеринга ролей в списке выбора, мы должны убедиться, что существует вероятность того, что у незнакомца будет введен вариант в html со значением ' администратор ". Это может не произойти ни для одной из статей с некоторыми возможностями редактирования.

Мне нужен намек на то, как я могу это сделать.

Вы можете использовать wp_dropdown_roles()

Я думаю, что !isset является более надежным способом тестирования, поэтому я добавил, что:

 add_filter( 'registration_errors', 'odin_registration_errors', 10, 3 ); function odin_registration_errors( $errors, $sanitized_user_login, $user_email ) { if ( !isset( $_POST['role'] ) || empty( $_POST['role'] ) || trim( $_POST['role'] ) == '' || $_POST['role'] == 'administrator' || $_POST['role'] == 'editor' || $_POST['role'] == 'contributor' || $_POST['role'] == 'author' || $_POST['role'] == 'shop_manager' ) { $errors->add( 'role_error', __( '<strong>ERROR</strong>: Select a valid role option.', 'odin' ) ); } // debug $error to file $debugfile = get_stylesheet_directory().'/roledebug.txt'; ob_start(); print_r($errors); $debugdata = ob_get_contents(); file_put_contents($debugfile,$debugdata); ob_end_clean(); return $errors; } 

И я не уверен, но, возможно, изменить <select> элемент <select> selected элемента в selected="selected" в первой функции.