Создать нового пользователя через форму в Wordpress
Я пытаюсь создать шаблон страницы на WordPress, который позволяет мне создать нового пользователя через форму в передней части сайта. По сути, я хочу, чтобы он выкладывался так, как он есть на странице администратора WordPress, но мне нужно, чтобы он работал на внешнем интерфейсе.
(Макет будет выглядеть так) WordPress Admin создать новую страницу пользователя
То, что я застрял сейчас, это когда пользователь нажимает "отправить", как я могу обработать данные и добавить их в базу данных wordpress? (Используя этот https://codex.wordpress.org/Function_Reference/wp_create_user)
(Пока код...) -
<?php
/**
* Template Name: Create User
*/
get_header('user');
?>
<?php // Start the Loop.
while ( have_posts() ) : the_post(); ?>
<div id="left-content">
<?php //GET THEME HEADER CONTENT
theme_title(get_the_title()); ?>
<!-- START CONTENT -->
<div id="content">
<?php if (woffice_is_user_allowed()) { ?>
<!-- PHP Create User -->
<?php
function add_user_from_form() {
$user_login = $_POST['email'];
$first_name = $_POST['fName'];
$last_name = $_POST['lName'];
$user_email = $_POST['email'];
$user_pass = $_POST['pass'];
$display_name = "{$first_name} {$last_name}";
$role = $_POST['role'];
$info = array(
'user_login' => $user_login,
'user_pass' => $user_pass,
'user_email' => $user_email,
'display_name' => $display_name,
'first_name' => $first_name,
'last_name' => $last_name,
'role' => $role
);
$result = wp_insert_user( $info )
if ( is_wp_error( $result ) ) {
echo $result->get_error_message();
} else {
echo "Added user {$result}";
}
}
?>
<div class="box">
<form id="create-user-form" method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
<div class="row">
<div class="col-md-12">
<input value="" name="fName" id="fName" placeholder="First Name" required="" type="text">
<input value="" name="lName" id="lName" placeholder="Last Name" required="" type="text">
<input value="" name="email" id="email" placeholder="Email" required="" type="text">
<input value="" name="pass" id="password" placeholder="Password" required="" type="Password">
<select name="role">
<option value="author">Author</option>
<option value="contributor">Contributor</option>
</select>
<input name="submit" type="submit" class="btn-ser" value="Create New User" style="width:160px !important; padding-left:18px;">
</div>
</div>
</form>
</div>
<?php } else {
get_template_part( 'content', 'private' );
}
?>
</div>
</div><!-- END #content-container -->
<?php theme_scroll_top(); ?>
</div><!-- END #left-content -->
<?php // END THE LOOP
endwhile; ?>
2 ответа
Пользователям нужно имя для входа в базу данных. Логин может быть любым. Пользователи не должны знать это, потому что пользователи могут войти с адресом электронной почты.
Я бы использовал wp_insert_user ().
Пример:
function add_user_from_form() {
$now = time(); // unique number
$c = chr( ($now % 26) + 65 ); // random letter
$user_login = $c . strval( $now ); // unique user name
$first_name = $_POST['fName'];
$last_name = $_POST['lName'];
$user_email = $_POST['email'];
$user_pass = $_POST['pass'];
$display_name = "{$first_name} {$last_name}";
/*
VALIDATE USER DATA BEFORE ADDING TO DATABASE
*/
$info = array('user_login' => $user_login,
'user_pass' => $user_pass,
'user_email' => $user_email,
'display_name' => $display_name,
'first_name' => $first_name,
'last_name' => $last_name);
$result = wp_insert_user( $info )
if ( is_wp_error( $result ) ) {
echo $result->get_error_message();
} else {
echo "Added user {$result}";
}
}
Простейший способ использовать это на странице - создать шаблон с другим заголовком и формой процесса на той же странице.
Например, скопируйте page.php в create-user.php и добавьте заголовок шаблона. Скопируйте header.php в header-user.php. замещать get_header()
сget_header('user')
,
Изменить действие в форме:
<form id="my-registration-form" method="post" action="<?php echo $_SERVER['PHP_SELF']">
Добавьте мою функцию в верхнюю часть заголовка с помощью:
if ( 'POST` == $_SERVER['REQUEST_METHOD'] ) {
add_user_from_form();
}
Вам не нужно action
, Вам просто нужно обработать форму.
Это не соответствует наилучшей практике использования шаблона MVC, но это легко и будет работать.
Надеюсь, что это проясняет предыдущий ответ.
Если вы хотите вставить данные в базу данных WP, вы можете использовать API базы данных WP.
Вы можете включить глобальный объект wpdb в ваш код для публикации данных формы в вашей базе данных.
global $wpdb;
Затем используйте функцию вставки для публикации данных в БД.
<?php $wpdb->insert( $table, $data, $format ); ?>
Проверьте эту ссылку для более подробной информации: https://codex.wordpress.org/Class_Reference/wpdb введите описание ссылки здесь
Создайте функцию в вашем functions.php, как показано ниже, для обработки ваших постовых данных:
function my_theme_send_email() {
if ( isset( $_POST['email-submission'] ) && '1' == $_POST['email-submission'] ) {
// Send the email...
} // end if
} // end my_theme_send_email
add_action( 'init', 'my_theme_send_email' );
Перейдите по этой ссылке, и они очень хорошо объяснили: https://tommcfarlin.com/sending-data-post/