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.

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.
//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

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.
¿Aún con dudas?, en el siguiente video se detalla los puntos tratados anteriormente.
Disculpa en caso de no querer buscar por id y querer buscar por texto como deberia ser?
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.
hola buenas y si se nesecitas nuevos campos y insertarlos a otra tabla como se pódria?
Hola, podrías cambiar el methods a POST, evaluaré realizar un artículo sobre eso.
Muchas gracias, muy claramente explicado