Rest API en WordPress

Desde la versión 4.7 WordPress integra una REST API y hoy les voy hablar sobre un caso peculiar sobre las rutas personalizadas.

Digamos que tenemos esta ruta personalizada en un plugin para usar un formulario de contacto

1<?php
2 
3add_action('rest_api_init', function () {
4 register_rest_route('myplugin/v1', '/foo', array(
5 'methods' => 'POST',
6 'callback' => 'my_awesome_func',
7 ));
8});
9 
10function my_awesome_func(WP_REST_Request $request)
11{
12 // TODO
13}

Y para enviar los datos usamos la vieja y confiable funcion AJAX y que es algo como esto:

1var dataValue = { "hello": "there" };
2 
3$.ajax({
4 url: 'http://wordpress.local/wp-json/myplugin/v1/foo',
5 dataType: 'json',
6 type: 'post',
7 contentType: 'application/json',
8 data: JSON.stringify( dataValue ),
9 processData: false,
10 success: function( res ){
11 // TODO
12 },
13});

Ahora, la parte divertida (?)

Como se obtiene la data que estamos enviando al backend para trabajar con ella?

De seguro pueden encontrar por ahí en internet alguien que les diga:

To get JSON data (or any raw input), use php://input. lo cual no esta del todo mal pero ya que estamos usando WordPress podemos aprovechar el objeto request.

La documentación dice que:

"By default, routes receive all arguments passed in from the request. These are merged into a single set of parameters, then added to the Request object, which is passed in as the first parameter to your endpoint."

Entonces, podemos usar:

1$param = $request['some_param'];
2 
3// Or via the helper method:
4$param = $request->get_param( 'some_param' );
5 
6// You can get the combined, merged set of parameters:
7$parameters = $request->get_params();
8 
9// The individual sets of parameters are also available, if needed:
10$parameters = $request->get_url_params();
11$parameters = $request->get_query_params();
12$parameters = $request->get_body_params();
13$parameters = $request->get_json_params();
14$parameters = $request->get_default_params();
15 
16// Uploads aren't merged in, but can be accessed separately:
17$parameters = $request->get_file_params();

Y para nuestro ejemplo estaríamos usando $parameters = $request->get_json_params(); y accedemos a los parámetros de esta forma: $parameters['hello'].

Espero que esto le sirva a alguien más.

Angel Cruz's avatar
Autor
Angel Cruz