---
title: "Rest API en WordPress"
excerpt: "Desde la versión 4.7 WordPress integra una REST API y hoy les voy hablar sobre un caso peculiar sobre las rutas personalizadas."
date: "2019-08-02T23:51:20.000Z"
category: "WordPress"
seo_title: "REST API en WordPress: rutas personalizadas con register_rest_route"
seo_description: "Crea rutas REST personalizadas en WordPress con register_rest_route desde WordPress 4.7. Aprende a recibir JSON desde el objeto WP_REST_Request usando get_json_params() en lugar de php://input."
author:
  name: "angel cruz"
  picture: "https://angelcruzdevcdn.nyc3.cdn.digitaloceanspaces.com/images/me/angel-cruz.png"
---

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


```php
<?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:

```js
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:

```php
$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.

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://www.angelcruz.dev/sitemap.md)

Canónico HTML: [https://www.angelcruz.dev/post/rest-api-en-wordpress](https://www.angelcruz.dev/post/rest-api-en-wordpress)
