WordPress

Rest API en WordPress

Autorangel cruz
Publicado
Lectura1 min de lectura

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'].

Espero que esto le sirva a alguien más.