在 WordPress REST API 端點中使用 POST 方法來新增使用者
在 WordPress 中,REST API 提供了一種強大且靈活的方式來與網站進行數據交互。除了使用 GET 方法來檢索數據外,我們還可以通過 POST 方法來創建新資源,如新增使用者。在本節課中,我們將學習如何在自訂的 REST API 端點中增加 POST 方法的支持,以允許請求者新增使用者。
為 REST API 端點添加 POST 方法
我們將基於前面的 GET 端點,通過 register_rest_route
函數為同一個端點添加 POST 方法的支持,這樣請求者就可以使用 POST 方法來新增使用者。
- 範例代碼:
function register_rest_routes() { // 使用 GET 方法列出使用者 register_rest_route( 'iot/v1', '/user/', array( 'methods' => 'GET', 'callback' => 'list_user_api' ) ); // 使用 POST 方法新增使用者 register_rest_route( 'iot/v1', '/user/', array( 'methods' => 'POST', 'callback' => 'add_user_api' ) ); } add_action('rest_api_init', 'register_rest_routes');
代碼解釋:
register_rest_route('iot/v1', '/user/', ...)
:這段代碼為/user/
端點註冊了兩個不同的 HTTP 方法,GET 用於列出使用者,POST 用於新增使用者。'methods' => 'POST'
:指定這個端點的 POST 方法支持,當請求者使用 POST 方法時,將觸發add_user_api
回調函數。
實現新增使用者的回調函數
當請求者使用 POST 方法調用 /user/
端點時,add_user_api
函數將被執行。這個函數將處理請求中的數據,並通過 wp_insert_user
函數來創建新使用者。
- 範例代碼:
function add_user_api($request) { // 取得並處理請求中的參數 $params = stripslashes_deep($request->get_body_params()); // 檢查必要的參數是否存在 if ( !isset($params["user_account"]) || !isset($params["user_password"]) || !isset($params["user_email"]) || !isset($params["first_name"]) || !isset($params["last_name"]) ) { return new WP_REST_Response( array( 'code' => 400, 'message' => 'Missing Parameter', 'data' => null ), 200 ); } // 安全地提取並過濾參數 $user_account = esc_sql($params['user_account']); $user_password = esc_sql($params['user_password']); $user_email = esc_sql($params['user_email']); $first_name = esc_sql($params['first_name']); $last_name = esc_sql($params['last_name']); // 創建新使用者 $user_id = wp_insert_user( array( 'user_login' => $user_account, 'user_pass' => $user_password, 'user_email' => $user_email, 'first_name' => $first_name, 'last_name' => $last_name, 'role' => 'subscriber' ) ); // 檢查使用者是否成功創建 if (is_wp_error($user_id)) { return new WP_REST_Response( array( 'code' => 500, 'message' => 'User creation failed', 'data' => $user_id->get_error_message() ), 500 ); } // 返回成功回應 return new WP_REST_Response( array( 'code' => 200, 'message' => 'success', 'data' => array('user_id' => $user_id) ), 200 ); }
代碼解釋:
stripslashes_deep($request->get_body_params())
:這行代碼用來取得並處理 POST 請求中的參數,並移除可能存在的轉義字符。!isset($params["user_account"]) ...
:這段代碼檢查請求中是否包含所有必要的參數,如果缺少任何參數,則返回錯誤回應。esc_sql(...)
:用來安全地過濾和處理來自請求的數據,防止 SQL 注入攻擊。wp_insert_user(...)
:使用這個 WordPress 核心函數來創建新的使用者,並設置其登錄名稱、密碼、電子郵件、姓名和角色。is_wp_error($user_id)
:檢查使用者創建過程中是否發生錯誤,如果發生錯誤,則返回錯誤信息。new WP_REST_Response(...)
:返回 API 請求的回應,其中包含狀態碼、信息和創建的使用者 ID(如果創建成功)。
測試新增使用者的 REST API 端點
完成代碼後,您可以通過 Postman 或其他 API 測試工具來測試這個端點。
- 測試步驟:
- 打開 Postman。
- 設置請求方法為 POST,URL 為
http://yourdomain.com/wp-json/iot/v1/user/
。 - 在請求體中使用
x-www-form-urlencoded
或raw
(JSON) 格式,並提供以下參數:user_account
:使用者的登錄名稱。user_password
:使用者的密碼。user_email
:使用者的電子郵件。first_name
:使用者的名字。last_name
:使用者的姓氏。
- 發送請求並檢查回應,您應該會看到成功創建使用者的回應信息和新使用者的 ID。