通过Wordpress中的表单创建新用户

时间:2016-12-01 14:50:00

标签: wordpress custom-wordpress-pages

我正在尝试在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; ?>

2 个答案:

答案 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的最佳做法,但它很容易并且可以使用。

希望这能澄清先前的答案。