创建自定义注册表

时间:2017-09-20 作者:Marcelo Henriques Cortez

所以,我有一个代码,让用户注册,使用WordPress中的常规字段。一切正常,创建用户并注册信息。

但是我需要在表单中添加新字段,并且它们必须在DB中注册。

我可能需要在函数中添加命令。php“在后端创建这些字段,但是,如何做到这一点,以及如何将它们与将在网站前端显示的表单上的字段“链接”?

以下是我目前掌握的代码:

function ds_registration_form(&$fields, &$errors) {

// Check args and replace if necessary
  if (!is_array($fields))     $fields = array();
  if (!is_wp_error($errors))  $errors = new WP_Error;

  // Check for form submit
  if (isset($_POST[\'submit\'])) {

// Get fields from submitted form
$fields = cr_get_fields();

// Validate fields and produce errors
if (cr_validate($fields, $errors)) {

  // If successful, register user
  wp_insert_user($fields);

  // And display a message
  echo \'Registration complete. Goto <a href="\' . get_site_url() . \'/wp-login.php">login page</a>.\';

  // Clear field data
  $fields = array(); 
}
  }

  // Santitize fields
  cr_sanitize($fields);

  // Generate form
  cr_display_form($fields, $errors);
}

function cr_sanitize(&$fields) {
  $fields[\'user_login\']   =  isset($fields[\'user_login\'])  ?     sanitize_user($fields[\'user_login\']) : \'\';
  $fields[\'user_pass\']    =  isset($fields[\'user_pass\'])   ?     esc_attr($fields[\'user_pass\']) : \'\';
  $fields[\'user_email\']   =  isset($fields[\'user_email\'])  ? sanitize_email($fields[\'user_email\']) : \'\';
  $fields[\'user_url\']     =  isset($fields[\'user_url\'])    ? esc_url($fields[\'user_url\']) : \'\';
  $fields[\'first_name\']   =  isset($fields[\'first_name\'])  ? sanitize_text_field($fields[\'first_name\']) : \'\';
  $fields[\'last_name\']    =  isset($fields[\'last_name\'])   ? sanitize_text_field($fields[\'last_name\']) : \'\';
  $fields[\'nickname\']     =  isset($fields[\'nickname\'])    ? sanitize_text_field($fields[\'nickname\']) : \'\';
  $fields[\'description\']  =  isset($fields[\'description\']) ? esc_textarea($fields[\'description\']) : \'\';
}

function cr_display_form($fields = array(), $errors = null) {

  // Check for wp error obj and see if it has any errors  
  if (is_wp_error($errors) && count($errors->get_error_messages()) > 0) {

    // Display errors
    ?><ul><?php
    foreach ($errors->get_error_messages() as $key => $val) {
      ?><li>
        <?php echo $val; ?>
      </li><?php
    }
    ?></ul><?php
  }

  // Disaply form

  ?><form action="<?php $_SERVER[\'REQUEST_URI\'] ?>" method="post">
    <div>
      <label for="user_login">Username <strong>*</strong></label>
      <input type="text" name="user_login" value="<?php echo     (isset($fields[\'user_login\']) ? $fields[\'user_login\'] : \'\') ?>">
    </div>

    <div>
      <label for="user_pass">Password <strong>*</strong></label>
      <input type="password" name="user_pass">
    </div>

    <div>
      <label for="email">Email <strong>*</strong></label>
      <input type="text" name="user_email" value="<?php echo (isset($fields[\'user_email\']) ? $fields[\'user_email\'] : \'\') ?>">
    </div>

    <div>
      <label for="website">Website</label>
      <input type="text" name="user_url" value="<?php echo     (isset($fields[\'user_url\']) ? $fields[\'user_url\'] : \'\') ?>">
    </div>

    <div>
      <label for="firstname">First Name</label>
      <input type="text" name="first_name" value="<?php echo (isset($fields[\'first_name\']) ? $fields[\'first_name\'] : \'\') ?>">
    </div>

    <div>
      <label for="website">Last Name</label>
      <input type="text" name="last_name" value="<?php echo (isset($fields[\'last_name\']) ? $fields[\'last_name\'] : \'\') ?>">
    </div>

    <div>
      <label for="nickname">Nickname</label>
      <input type="text" name="nickname" value="<?php echo (isset($fields[\'nickname\']) ? $fields[\'nickname\'] : \'\') ?>">
    </div>

    <div>
      <label for="bio">About / Bio</label>
      <textarea name="description"><?php echo (isset($fields[\'description\']) ? $fields[\'description\'] : \'\') ?></textarea>
    </div>

    <input type="submit" name="submit" value="Register">
    </form><?php
}

function cr_get_fields() {
  return array(
    \'user_login\'   =>  isset($_POST[\'user_login\'])   ?  $_POST[\'user_login\']   :  \'\',
    \'user_pass\'    =>  isset($_POST[\'user_pass\'])    ?  $_POST[\'user_pass\']    :  \'\',
    \'user_email\'   =>  isset($_POST[\'user_email\'])   ?  $_POST[\'user_email\']        :  \'\',
    \'user_url\'     =>  isset($_POST[\'user_url\'])     ?  $_POST[\'user_url\']     :  \'\',
    \'first_name\'   =>  isset($_POST[\'first_name\'])   ?  $_POST[\'first_name\']        :  \'\',
    \'last_name\'    =>  isset($_POST[\'last_name\'])    ?  $_POST[\'last_name\']        :  \'\',
    \'nickname\'     =>  isset($_POST[\'nickname\'])     ?  $_POST[\'nickname\']     :  \'\',
    \'description\'  =>  isset($_POST[\'description\'])  ?      $_POST[\'description\']  :  \'\',
  );
}

function cr_validate(&$fields, &$errors) {

  // Make sure there is a proper wp error obj
  // If not, make one
  if (!is_wp_error($errors))  $errors = new WP_Error;

  // Validate form data

  if (empty($fields[\'user_login\']) || empty($fields[\'user_pass\']) ||     empty($fields[\'user_email\'])) {
   $errors->add(\'field\', \'Required form field is missing\');
  }

  if (strlen($fields[\'user_login\']) < 4) {
    $errors->add(\'username_length\', \'Username too short. At least 4 characters is required\');
  }

  if (username_exists($fields[\'user_login\']))
    $errors->add(\'user_name\', \'Sorry, that username already exists!\');

  if (!validate_username($fields[\'user_login\'])) {
    $errors->add(\'username_invalid\', \'Sorry, the username you entered is not     valid\');
  }

  if (strlen($fields[\'user_pass\']) < 5) {
    $errors->add(\'user_pass\', \'Password length must be greater than 5\');
  }

  if (!is_email($fields[\'user_email\'])) {
    $errors->add(\'email_invalid\', \'Email is not valid\');
  }

  if (email_exists($fields[\'user_email\'])) {
    $errors->add(\'email\', \'Email Already in use\');
  }

  if (!empty($fields[\'user_url\'])) {
    if (!filter_var($fields[\'user_url\'], FILTER_VALIDATE_URL)) {
      $errors->add(\'user_url\', \'Website is not a valid URL\');
    }
 }

  // If errors were produced, fail
  if (count($errors->get_error_messages()) > 0) {
    return false;
  }

  // Else, success!
  return true;
}

1 个回复
最合适的回答,由SO网友:Marcelo Henriques Cortez 整理而成

好的,我找到了解决方案。

我在变量中放置了“wp\\u insert\\u user”。

我用这个变量定义了带有“update\\u user\\u meta”的额外字段。

// If successful, register user
 $user_id = wp_insert_user($fields);
 update_user_meta( $user_id, \'teste\', $fields[\'teste\'] );

结束

相关推荐

AJAX在插件php文件中调用

我正在开发一个名为Ajaxso的插件,我在插件中做了一些事情,并将js列在js文件的主文件中,在数据部分添加操作,然后将该数据称为另一个。php文件add same action name函数add add\\u action,但在调用Ajax之后,没有定义错误add\\u action,因此请建议我如何在插件中调用该Ajax。===js file == var ajaxurl = myScript.ajaxurl; (Custom File Ajax URL) jQuery(\"#idF