可以使用add_rewrite_rule()
.
在这种情况下,我们将注册端点http://example.com/api/user_data/{id}
.
然后检查以确保IDis numeric. 如果是,请查找user by id 并输出JSON response.
URL
http://example.com/api/user_data/1
JSON
{
"success": true,
"data": {
"id": 1,
"display_name": "your_username",
"user_registered": "2015-11-12 05:00:00",
"first": "First",
"last": "Last Name"
}
}
PHP将其放入函数中。php或插件,然后刷新永久链接。
if ( ! class_exists( \'JSONEndpoint_UserData\' ) ):
/**
* The code that registers the endpoint and handles the result
*/
class JSONEndpoint_UserData {
const ENDPOINT_NAME = \'api/user_data\'; // endpoint to capture
const ENDPOINT_QUERY_NAME = \'__api_user_data\'; // turns to param
// WordPress hooks
public function run() {
add_filter( \'query_vars\', array( $this, \'add_query_vars\' ), 0 );
add_action( \'parse_request\', array( $this, \'sniff_requests\' ), 0 );
add_action( \'init\', array( $this, \'add_endpoint\' ), 0 );
}
// Add public query vars
public function add_query_vars( $vars ) {
$vars[] = static::ENDPOINT_QUERY_NAME;
$vars[] = \'id\';
return $vars;
}
// Add API Endpoint
public function add_endpoint() {
add_rewrite_rule( \'^\' . static::ENDPOINT_NAME . \'/([^/]+)/?$\', \'index.php?\' . static::ENDPOINT_QUERY_NAME . \'=1&id=$matches[1]\', \'top\' );
// --->
flush_rewrite_rules( true ); //// <---------- REMOVE THIS WHEN DONE TESTING
// --->
}
// Sniff Requests
public function sniff_requests( $wp_query ) {
global $wp;
if ( isset( $wp->query_vars[ static::ENDPOINT_QUERY_NAME ] ) ) {
$this->handle_request(); // handle it
}
}
// Handle Requests
protected function handle_request() {
global $wp;
// we only deal with number$
$id = is_numeric( $wp->query_vars[ \'id\' ] ) ? absint( $wp->query_vars[ \'id\' ] ) : false;
if ( ! is_numeric( $id ) || ! $user = get_user_by( \'id\', $id ) ) {
wp_send_json_error( array( \'message\' => \'Invalid User ID\' ) );
}
// ALLOWING ACCESS FROM ANYWHERE --- WE MIGHT WANT TO RESTRICT THE PLACES THAT CAN USE THIS
header( "Access-Control-Allow-Origin: *" );
// prep the response
$data = array(
\'id\' => $user->ID,
\'display_name\' => $user->data->display_name,
\'user_registered\' => $user->data->user_registered,
\'first\' => $user->first_name,
\'last\' => $user->last_name,
);
// write the response
wp_send_json_success( $data );
die(); // just in case
}
}
$ep = new JSONEndpoint_UserData();
$ep->run();
endif; // JSONEndpoint_UserData