Last active
July 21, 2021 05:04
-
-
Save ikhsanalatsary/e0361682b0630cd2f3f76bea9e5b63a7 to your computer and use it in GitHub Desktop.
Custom Plugin to Handle Register User Endpoint for Wordpress
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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