WordPress

Rest API en WordPress

Autorangel cruz
Publicado
Lectura2 min de lectura
Rest API en WordPress

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

<?php
 
add_action('rest_api_init', function () {
	register_rest_route('myplugin/v1', '/foo', array(
		'methods' => 'POST',
		'callback' => 'my_awesome_func',
	));
});
 
function my_awesome_func(WP_REST_Request $request)
{
	// TODO
}

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

var dataValue = { "hello": "there" };
 
$.ajax({
    url: 'http://wordpress.local/wp-json/myplugin/v1/foo',
    dataType: 'json',
    type: 'post',
    contentType: 'application/json',
    data: JSON.stringify( dataValue ),
    processData: false,
    success: function( res ){
        // TODO
    },
});

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:

$param = $request['some_param'];
 
// Or via the helper method:
$param = $request->get_param( 'some_param' );
 
// You can get the combined, merged set of parameters:
$parameters = $request->get_params();
 
// The individual sets of parameters are also available, if needed:
$parameters = $request->get_url_params();
$parameters = $request->get_query_params();
$parameters = $request->get_body_params();
$parameters = $request->get_json_params();
$parameters = $request->get_default_params();
 
// Uploads aren't merged in, but can be accessed separately:
$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'].

Una nota práctica: probar rutas REST personalizadas contra un sitio en producción es mala idea, porque un register_rest_route mal declarado queda expuesto públicamente mientras lo depuras. Para eso conviene un WordPress local, y hoy lo más rápido es WordPress Studio, que además trae Xdebug configurado.

Espero que esto le sirva a alguien más.