用于用户注册(注册)的 Wordpress REST API [英] Wordpress REST API for user sign up (registration)

查看:52
本文介绍了用于用户注册(注册)的 Wordpress REST API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以创建一个可以通过 WP REST API 工作的注册表单,以便访问者能够在我的网站上创建帐户?

Is it possible to create a sign up form that can work through WP REST API for visitors to be able to create accounts on my site?

我可以创建这样的表单并使用它来创建新用户.当我以管理员身份登录时,这适用于 wp_rest nonce.

I can create such a form and use it to create new users. This works with wp_rest nonce when I am logged in as administrator.

但是如果有一个没有登录的访问者,同样的表单当然是行不通的.我认为这是一个身份验证问题.你能提出一个一般的想法,这是如何工作的吗?如何让访问者能够注册 REST API?

But if there is a visitor which is not logged in, the same form does not work of course. I think this is a question of authentication. Can you suggest a general idea how this can work? How can I allow visitors to be able to sign up with REST API?

推荐答案

希望您已经找到了答案!

Hopefully you've found your answers already!

如果没有,只需将以下代码粘贴到您主题的 function.php 中,它就会像魅力一样工作.以下代码应通过 REST API 将用户注册添加到您的 WordPress 网站.它支持订阅者"和客户"的注册.源代码也可在 Github 上找到.

If not, just paste the following code in your theme's function.php, and it should work like a charm.The following code should add User Registration via REST API to your WordPress Website. It supports Registration of 'subscriber' and 'customer'. Source code also available on Github.

将其添加到您的 function.php

Add it to your function.php

add_action('rest_api_init', 'wp_rest_user_endpoints');
/**
 * Register a new user
 *
 * @param  WP_REST_Request $request Full details about the request.
 * @return array $args.
 **/
function wp_rest_user_endpoints($request) {
  /**
   * Handle Register User request.
   */
  register_rest_route('wp/v2', 'users/register', array(
    'methods' => 'POST',
    'callback' => 'wc_rest_user_endpoint_handler',
  ));
}
function wc_rest_user_endpoint_handler($request = null) {
  $response = array();
  $parameters = $request->get_json_params();
  $username = sanitize_text_field($parameters['username']);
  $email = sanitize_text_field($parameters['email']);
  $password = sanitize_text_field($parameters['password']);
  // $role = sanitize_text_field($parameters['role']);
  $error = new WP_Error();
  if (empty($username)) {
    $error->add(400, __("Username field 'username' is required.", 'wp-rest-user'), array('status' => 400));
    return $error;
  }
  if (empty($email)) {
    $error->add(401, __("Email field 'email' is required.", 'wp-rest-user'), array('status' => 400));
    return $error;
  }
  if (empty($password)) {
    $error->add(404, __("Password field 'password' is required.", 'wp-rest-user'), array('status' => 400));
    return $error;
  }
  // if (empty($role)) {
  //  $role = 'subscriber';
  // } else {
  //     if ($GLOBALS['wp_roles']->is_role($role)) {
  //      // Silence is gold
  //     } else {
  //    $error->add(405, __("Role field 'role' is not a valid. Check your User Roles from Dashboard.", 'wp_rest_user'), array('status' => 400));
  //    return $error;
  //     }
  // }
  $user_id = username_exists($username);
  if (!$user_id && email_exists($email) == false) {
    $user_id = wp_create_user($username, $password, $email);
    if (!is_wp_error($user_id)) {
      // Ger User Meta Data (Sensitive, Password included. DO NOT pass to front end.)
      $user = get_user_by('id', $user_id);
      // $user->set_role($role);
      $user->set_role('subscriber');
      // WooCommerce specific code
      if (class_exists('WooCommerce')) {
        $user->set_role('customer');
      }
      // Ger User Data (Non-Sensitive, Pass to front end.)
      $response['code'] = 200;
      $response['message'] = __("User '" . $username . "' Registration was Successful", "wp-rest-user");
    } else {
      return $user_id;
    }
  } else {
    $error->add(406, __("Email already exists, please try 'Reset Password'", 'wp-rest-user'), array('status' => 400));
    return $error;
  }
  return new WP_REST_Response($response, 123);
}

恕我直言,更好的方法是将附加功能作为单独的插件包含在内.因此,即使您的用户更改了主题,您的 api 调用也不会受到影响.

IMHO, a more better way would to include the additional function as a seperate plugin. So even when your user changed theme, your api calls won't be affected.

因此,我开发了一个插件,用于在 WordPress 中通过 REST API 进行用户注册.更好的是,它还支持为 WooCommerce 创建客户"!

Therefore I've developed a plugin for User Registration via REST API in WordPress. Better yet, it supports creating 'customer' for WooCommerce too!

WP REST 用户,如果需要,请查看.

这篇关于用于用户注册(注册)的 Wordpress REST API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆