我正在尝试在wordpress上创建一个页面模板,允许我通过网站前端的表单创建一个新用户。基本上我希望它像wordpress管理页面上的目前一样布局,但我需要让它在前端工作。
(布局看起来像这样)wordpress admin create new user page
我现在遇到的部分是,当用户按下提交时,我该如何处理数据并将其添加到wordpress db中? (使用此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; ?>
答案 0 :(得分:0)
如果要在WP数据库中插入数据,可以使用WP数据库API。
您可以在代码中包含全局wpdb 对象,以便在数据库中发布表单数据。
global $wpdb;
然后使用insert函数在db。中发布数据。
<?php $wpdb->insert( $table, $data, $format ); ?>
点击此链接了解详情:https://codex.wordpress.org/Class_Reference/wpdb#INSERT_row enter link description here
在您的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/
答案 1 :(得分:0)
用户需要数据库的登录名。登录可以是任何东西。用户不需要知道它,因为用户可以使用电子邮件地址登录。
我会使用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}";
}
}
在页面上使用此方法的最简单方法是在同一页面上创建一个template,其中包含不同的标题和流程表单。
E.g。将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 pattern的最佳做法,但它很容易并且可以使用。
希望这能澄清先前的答案。