Intereting Posts
Невозможно передать переменную Запускать одноразовый скрипт, вызывающий функции плагина Как создать эту постоянную ссылку: post_type / postname / custom_inner_page Обновить страницу с помощью Cron после публикации любой публикации Перенаправление URL-адресов необходимо активировать вручную для моего плагина Может ли большое количество файлов в папке uploads влиять на производительность? Trigger JS, когда отображается окно загрузки изображений в admin Вызов идентификатора привязки вне цикла Исправлена ​​ошибка загрузки Bootstrap navbar в меню темы WordPress array_pop () ожидает массив, имеющий значение boolean для $ event_type_term -> slug Не удается войти в админ, нет сообщения об ошибке mysql обновить пароль пользователя и ключ активации Добавление диапазона к wp_link_pages () Не разрешать доступ к wp-admin, но разрешить выполнение админовских запросов на интерфейсе? Как изменить класс css для определенного формата сообщения?

Добавление формы входа, которая объединяет три поля в имя пользователя

У меня есть ситуация, когда мне нужно аутентифицировать пользователей с тремя значениями (в отличие от одного значения USERNAME . Назовем их VALUE1 , VALUE2 , VALUE3 . Им не будет задан конкретный PASSWORD .

Я искал модификацию процедуры входа в систему, так что он запрашивает три значения и аутентифицирует пользователя на основе этих трех значений (аналогично тому, что описано здесь ). Но поскольку WordPress нуждается в уникальном поле USERNAME и одно из значений, введенных на странице входа в систему, действительно должно быть USERNAME , это не сработает, просто потому, что ни одно из трех значений не является уникальным по своему усмотрению. Уникальна комбинация всех трех значений.

Это приводит к идее, что USERNAME хранящееся в WP, может быть значением, полученным от объединения трех VALUE1 значений ( VALUE1 , VALUE2 , VALUE3 ). Таким образом, USERNAME будет VALUE1VALUE2VALUE3 .

Я также использовал бы это конкатенированное значение как PASSWORD , потому что я не требую от пользователя ввода отдельного пароля, если они знают три значения, которые я запрашиваю.

ВОПРОС 1

Мой первый вопрос заключается в том, является ли верное обоснование верным? Верно ли, что даже если я добавлю дополнительные поля в процедуру регистрации, одно из этих полей должно соответствовать значению USERNAME , и это значение должно быть уникальным?

ВОПРОС 2

Если это правильно, то мой следующий вопрос: как мне создать форму входа, которая запрашивает три поля (плюс пароль), и объединяет эти поля в одно значение, USERNAME проверку подлинности против USERNAME ?

Например

Пользовательская страница входа в систему запросит следующее:

VALUE1 , VALUE2 , VALUE3

Затем он объединяет их в VALUE1VALUE2VALUE3 и передает это стандартную подсистему входа в WP как значения USERNAME и PASSWORD .


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

Если вы создадите пользователя, передав значения, введенные в функцию, которая их объединяет, вы можете вызвать ее из другой, которая вызывает wp_insert_user . Затем вы можете сохранить имя пользователя / пароль по мере необходимости и использовать ту же функцию и форму при подготовке их к WP для проверки входа в систему. Весь приведенный ниже код предназначен только для демонстрации. Не могу это подчеркнуть. Определенно посмотрите на nonce и подтвердите регистрацию.

Опять же, это ТОЛЬКО демо-идея идеи указать в общем направлении.

 <form> <input type="text" name"value1" /> <input type="text" name"value2" /> <input type="text" name"value3" /> </form> 

Тогда у нас есть функция для обработки объединения записей:

 <?php function getting_posted_values() { if(isset($_POST['value1']) && (isset($_POST['value2']) && (isset($_POST['value3']) { $value1 = $_POST['value1']; $value2 = $_POST['value2']; $value3 = $_POST['value3']; $new_value = $value1 . $value2 . $value3; } return $new_value; } 

Затем подключенная функция – (например, если вы использовали контактную форму 7 для управления формой, вы можете подключить wpcf7_before_send_mail и получить доступ к объекту post.) – можно вызвать функцию ниже и создать нового пользователя:

 function build_a_new_user($posted_form) { $new_value = getting_posted_values($posted_form); $userdata = array( 'user_login' => $new_value, 'user_pass' => $new_value, //normally: wp_generate_password( 12, false ); 'user_email' => //note: not sure but may be required? 'nickname' => $new_value, 'display_name' => $new_value, 'first_name' => $new_value, 'last_name' => $new_value, 'role' => 'subscriber' ); wp_insert_user($userdata); } 

Здесь описывается wp_insert_user () .

Подробнее об обработке пользовательской регистрации здесь.

Для входа в систему

Ваша форма со значениями 1,2,3 снова запустит get_post_values, вызвав ее в другую функцию, которая каким-то образом подключается к журналу. Возможно, фильтр login_form_defaults который может редактировать массив args для формы. Следующее – полная спекуляция как нерабочий пример .

Но идея состоит в том, что если вы можете передать эти значения в обычный процесс WP (возможно, через фильтр authenticate упомянутый в вашем связанном примере?) В качестве пользователя / пароля, вы можете отказаться от проверки.

 function log_in_handler($posted_form) { $pass_and_username = getting_posted_values($posted_form); $args_array = array( 'username_id' => $pass_and_username, 'password' => $pass_and_username); } 

Это определенно интересная работа. Надеюсь, это поможет.

Вот что закончилось тем, что работало. В случае, если это полезно для кого-то, желающего сделать что-то подобное.

Мы создали пользовательский шаблон в дочерней теме.

Конечное конкатенированное значение используется как USERNAME и PASSWORD.

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

 <?php /** Template Name: Custom Login Page */ if ( is_user_logged_in() ) { wp_redirect( LOGIN_REDIRECT ); // LOGIN_REDIRECT is set in the config.php file. } $WP_Error = new WP_Error(); if(isset($_POST['form-action']) && $_POST['form-action']=='login') { $VALUE1 = trim($_POST['log-sname']); $VALUE1 = preg_replace("/[^A-Za-z0-9\- ']/", '', $VALUE1); $VALUE2 = $_POST['VALUE2']; $VALUE3 = $_POST['VALUE3']; $usernm = strtoupper(trim($VALUE1)).$VALUE2.$VALUE3; $passwd = strtoupper(trim($VALUE1)).$VALUE2.$VALUE3; $login_data = array(); $login_data['user_login'] = $usernm; $login_data['user_password'] = $passwd; $login_data['remember'] = false; $user_verify = wp_signon( $login_data, false ); if ( is_wp_error($user_verify) ) { $WP_Error->add('my_error', '<p align="center">We were unable to validate your user credentials. ETC ETC... error message instructions ETC</p>'); } else { wp_redirect( LOGIN_REDIRECT ); // LOGIN_REDIRECT is set in the config.php file. exit(); } } 

Это то, что обрабатывает логин. После этого идет заголовок ..

  get_header(); ?> 

После этого это стандартный PHP для цикла и т. Д., А также некоторый код для отображения ошибки, если он сгенерирован:

 <div id="primary" <?php PARENT_THEME_SPECIFIC_content_class( 'content-area' ); ?> > // use content_class suitable to your theme scenario <main id="main" class="site-main" role="main"> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'template-parts/content', 'page' ); ?> <?php endwhile; // End of the loop. ?> <?php echo $WP_Error->errors['my_error'][0]; ?> 

, а затем форму, которая собирает VALUE1, VALUE2 и VALUE3. Пост-действие установлено на "" . Вот объявление form :

Закройте с вставкой нижний колонтитул и все, что может понадобиться.

Вот и все.