Skip to content

Instantly share code, notes, and snippets.

@ikhsanalatsary
Last active July 21, 2021 05:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikhsanalatsary/e0361682b0630cd2f3f76bea9e5b63a7 to your computer and use it in GitHub Desktop.
Save ikhsanalatsary/e0361682b0630cd2f3f76bea9e5b63a7 to your computer and use it in GitHub Desktop.
Custom Plugin to Handle Register User Endpoint for Wordpress
<?php
/**
* @package WP_Register_User
* @version 1.0.0
*/
/*
Plugin Name: WP Register User
Plugin URI: https://github.com/ikhsanalatsary/
Description: Register user custom endpoint
Author: Abdul Fattah Ikhsan
Version: 1.0.0
Author URI: https://ikhsan.dev/
*/
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']);
$first_name = sanitize_text_field($parameters['first_name']);
$last_name = sanitize_text_field($parameters['last_name']);
$alamat = sanitize_text_field($parameters['alamat']);
$no_hp = sanitize_text_field($parameters['no_hp']);
// $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) {
$userdata = array(
'user_login' => $username,
'user_nicename' => $username,
'user_pass' => $password,
'user_email' => $email,
'first_name' => $first_name,
'last_name' => $last_name
);
// $user_id = wp_create_user($username, $password, $email);
$user_id = wp_insert_user( $userdata ) ;
if (!is_wp_error($user_id)) {
update_user_meta( $user_id, 'alamat', $alamat );
update_user_meta( $user_id, 'no_hp', $no_hp );
// 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);
}
<?php
/**
* @package WP_Register_User
* @version 1.0.0
*/
/*
Plugin Name: WP Register User
Plugin URI: https://github.com/ikhsanalatsary/
Description: Register user custom endpoint
Author: Abdul Fattah Ikhsan
Version: 1.0.0
Author URI: https://ikhsan.dev/
*/
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 random_username($firstname, $lastname) {
$firstname = strtolower($firstname);
$lastname = strtolower(substr($lastname, 0, 2));
$nrRand = rand(0, 100);
return $firstname . $lastname . $nrRand;
}
function wc_rest_user_endpoint_handler($request = null) {
$response = array();
$error = new WP_Error();
$parameters = $request->get_json_params();
$username = sanitize_text_field($parameters['username']);
$email = sanitize_text_field($parameters['email']);
$password = sanitize_text_field($parameters['password']);
$first_name = sanitize_text_field($parameters['first_name']);
$last_name = sanitize_text_field($parameters['last_name']);
$alamat = sanitize_text_field($parameters['alamat']);
$no_hp = sanitize_text_field($parameters['no_hp']);
// $role = sanitize_text_field($parameters['role']);
if (empty($username)) {
$username = random_username($first_name, $last_name);
}
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) {
$userdata = array(
'user_login' => $username,
'user_nicename' => $username,
'user_pass' => $password,
'user_email' => $email,
'first_name' => $first_name,
'last_name' => $last_name
);
// $user_id = wp_create_user($username, $password, $email);
$user_id = wp_insert_user( $userdata ) ;
if (!is_wp_error($user_id)) {
update_user_meta( $user_id, 'alamat', $alamat );
update_user_meta( $user_id, 'no_hp', $no_hp );
// 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);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment