X

Agregar endpoints a la API REST de WordPress

En un artículo anterior vimos Cómo usar la REST API de WordPress , usamos algunos de los endpoints que WordPress trae por defecto, sin embargo, ¿ Cómo haces para crear tus propios endpoints ya sea de contenido propio de WordPress o de tus propios Plugins?

 

Generalidades

Un endpoint es la url que usarás para obtener un recurso de la API REST, gracias a WordPress podemos crear nuevos endpoints y extender la funcionalidad de la API REST de nuestro sitio web.

 

Ejemplo de un nuevo endpoint

Supongamos que quieres obtener los datos de la tabla de un plugin que no tiene interfaz API, en nuestro ejemplo será el plugin Yoast SEO que tiene la tabla llamada wp_yoast_seo_links, esta tabla nos muestra una lista de los enlaces por cada artículo.

Lo que haremos será un nuevo endpoint para obtener una lista de todos los enlaces que tiene un artículo dado su identificador post_id.

Las siguiente imagen muestra los datos de ejemplo de la tabla wp_yoast_seo_links.

Para el contenido de WordPress ya tienes todos los posibles endpoints que te puedas imaginar.

 

Agregar endpoint a la API REST de WordPress

Usaremos un Hook de WordPress llamado rest_api_init para registrar una nueva ruta con la función register_rest_route, esta función tiene varios parámetros, en nuestro caso usaremos los tres primeros, el último de ellos, el array, nos permite pasar la función de callback en la cual programamos la devolución de los resultados.

Puedes agregar este código como parte de un plugin o para pruebas puedes hacerlo en el archivo functions.php de tu theme.

//Uso del Hook
add_action( 'rest_api_init', function () {
  register_rest_route( 'dcms-seo-yoast/v1', '/links/(?P<post_id>\d+)', array(
    'methods' => 'GET',
    'callback' => 'dcms_get_links_from_post',
  ) );
} );

//Función Callback
function dcms_get_links_from_post( $data ) {
  global $wpdb;

  $table = $wpdb->base_prefix . 'yoast_seo_links';
  $sql = "SELECT url FROM $table WHERE post_id = %d";
  $post_id = $data['post_id'];

  $result = $wpdb->get_results( $wpdb->prepare( $sql, $post_id ) );

  return $result;
}

En el código anterior:

  • Para usar la función register_rest_route, usamos el namespace dcms-seo-yoast/v1 y como ruta /links/(?P<post_id>\d+)
  • El último parámetro de la función register_rest_route es un array en el cual definimos la función callback
  • Puesto que como parte de la ruta pasamos un parámetro llamado post_id, podemos usarlo en la función callback para hacer una consulta SQL a la tabla que nos interesa y devolver los datos.
  • Con el parámetro pasado formamos la consulta SQL a la tabla de Yoast SEO que nos interesa

 

Resultado Final

Luego de agregar el código podemos hacer la consulta directamente al navegador, en este ejemplo he usado el dominio decodecms, por lo tanto la url completa sería:


https://decodecms.com/wp-json/dcms-seo-yoast/v1/links/594

Esta ruta obtiene los enlaces que tiene el artículo con id = 594 de la tabla de enlaces de Yoast SEO

Recuerda tener habilitadas urls amigables en tu sitio para probar la url

 

Conclusión

Como has podido ver, extender la funcionalidad de API REST agregando nuevos endpoints en WordPress no supone mayores complicaciones, puedes usar esta funcionalidad en tus proyectos en donde deseas que un plugin se comunique externamente con algún otro sistema.

 

Categorías: Core

Ver comentarios (7)

    • Hola, tienes que cambiar la consulta SQL, por ejemplo:
      WHERE campo = '%s'
      %s indica que se trata de un string.

      Saludos.

  • Hola. Quisiera saber si me pueden ayudar a conectar un API externo a Woocomers, para que el stock, precio, etc se obtengan de esa api externa.
    La documentacion de la api dice que con el siguiente codigo se obtiene el archivo json:
    curl --request POST --url https://xxxxxx.mx/oauth/token
    -H 'Content-Type: application/x-www-form-urlencoded'
    --data 'client_id=ID_CLIENTE&client_secret=SECRETO_CLIENTE&grant_type=client_credentials'

    • Hola David, lo que te están indicando es la generación del token, luego con el token puedes hacer las consultas para actualizar. Espero hacer un curso sobre próximamente ya que hay varios puntos que cubrir. Saludos.