Quiero crear un punto final de REST API para un sitio de wordpress donde pueda obtener una respuesta JSON para diferentes consultas. He intentado el tutorial aquí , pero parece que no entiendo cómo funciona. ¿Necesito registrar todas las variables de consulta para usarlas? También creo que sería mejor usar el add_rewrite_endpoint
pero no he usado nada de esto antes. Así que me gustaría saber cómo usar esa función en el siguiente código.
Quiero enviar una consulta como <url>/wp-api/version
a donde devolverá el número de versión de wordpress. Pero en este momento no está tomando ninguna otra consulta que no sea 'pugs'. No estoy seguro de qué está pasando exactamente con la expresión regular, así que no cambié eso. ¿Puede alguien ayudarme por favor a entender esto?
class WP_API_Endpoint{
// Hook WordPress
public function __construct(){
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
@param array $vars List of current public query vars
@return array $vars
*/
public function add_query_vars($vars){
$vars[] = '__wp-api';
$vars[] = 'pugs';
return $vars;
}
// Add API Endpoint
public function add_endpoint(){
add_rewrite_rule('^wp-api/pugs/?([0-9]+)?/?','index.php?__wp-api=1&pugs=$matches[1]','top');
}
/*
Sniff Requests
This is where we hijack all API requests
If $_GET['__api'] is set, we kill WP and serve our data
@return die if API request
*/
public function sniff_requests(){
global $wp;
if(isset($wp->query_vars['__wp-api'])){
$this->handle_request();
exit;
}
}
protected function get_wp_version() {
return get_bloginfo('version');
}
// This is where we handle incoming requests
protected function handle_request(){
global $wp;
$pugs = $wp->query_vars['pugs'];
if($pugs)
$this->send_response('wp-version', $this->get_wp_version());
else
$this->send_response('Something went wrong with the pug bomb factory');
}
// This sends a JSON response to the browser
protected function send_response($key, $val){
$response[$key] = $val;
header('content-type: application/json; charset=utf-8');
echo json_encode($response)."\n";
exit;
}
}
new WP_API_Endpoint();