Suscríbete a DecodeCMS:
En un artículo anterior habíamos visto cómo usar la API Rest de WordPress, sin embargo en este artículo veremos como leer desde WordPress una API Rest de un servicio externo.
Resultado Final
Al final lo que queremos obtener será algo similar a lo que se muestra en la siguiente imagen:

Generalidades
- Accederemos a una API gratuita del sitio Sampleapis.
- Usaremos las funciones de WordPress para conectarse a esta API de manera simple.
- Los resultados lo mostraremos en una página específica de WordPress.
Código para leer datos desde una API externa
En el código anterior:
- Usamos el Hook de filtro the_content para agregar contenido adicional en una página específica
- La comprobación de la página la hacemos con la función is_page() y usuando el slug de la página
- La recuperación de los datos de la API externa lo hacemos en la función get_data_api()
- Usamos la función wp_remote_get() para obtener los datos de la url pública de la API
- Si existe algún error lo comprobamos con la función is_wp_error()
- De la respuesta recibida obtenemos los datos con la función wp_remote_retrieve_body()
- Usamos la función json_decode() para decodificar la cadena de texto devuelta y trabajarlo en PHP
- Los datos tienen la estructura de un array por lo que podemos recorrer el array y mostrar los datos en formato de tabla HTML
- Usamos una variable de $template y la función str_replace() para reemplazar la estructura de tabla
- Finalmente retornamos el HTML de la tabla construída
En el código he usado la función wp_remote_get(), esta es una función basada en la función wp_remote_request()
Conclusión
Como has podido comprobar, a pesar de existir diferentes formas de leer datos desde una API usando PHP, si estas en el entorno de WordPress puedes usar las propias funciones de WordPress, las cuales te facilitarán la labor de obtener y gestionar recursos de una API externa.
Habrá alguna manera de hacerlo partiendo de un formulario por ejemplo para una autenticación en una api externa. Saludos
Hola
Usualmente si es una Api con autenticación se realizará a través de tokens, espero hablar sobre esto en futuros videos.
Excelente articulo, pero tengo una duda, como se haria en caso de que la informacion obtenida se muestre en una parte especifica de la pagina y no en toda?
Hola, podrías crear un Shortcode e insertarlo en donde lo requieras, revisa el siguiente artículo de referencia: https://decodecms.com/shortcode-para-busqueda-en-tabla-personalizada-en-wordpress/
Saludos.
Hola, muchas gracias por tus videos y artículos. Gracias a ellos, estoy aprendiendo muuucho !!!.
Una consulta: La variable $content es alguna variable reservada de la API de WordPress que toma el contenido existente en la página en cuestión ?. O está definida previamente para poder usarla ?. En definitiva, cómo sé que contiene “el contenido” previo que tenía la página a la cual quiero concatenarle el contenido que ahora estoy llamando de la API externa ?. Espero que entieda mi pregunta. Y desde ya, muchísimas gracias !!!.
Hola, si, efectivamente $content es un parámetro ya existente que te brinda WordPress. Te sugiero revisar el artículo de Hooks para que entiendas como es que WordPress gestiona el código externo: https://decodecms.com/los-hooks-wordpress-usarlos/
Saludos.
Buen articulo, gracias.
Una pregunta:
¿si quisiera rellenar un formulario con los datos extraídos de la api valdría este código?
Hola Victor, supongo que te refieres a que cuando cargue un formulario los valores que se muestran por defecto o los valores de algunos controles, como los de selección, se llenen con datos de la API, si es posible, ya que sería una lectura de la API pero adaptada para mostrarse como parte de un formulario.
Hola Jhon, muchas gracias por compartir tus conocimientos.
tengo una duda, cómo puedo filtrar los datos, que solo muestre por ejemplo los vinos de solo un país?
Hola, usualmente los filtros deberían estar a nivel de la propia API, es decir en el código sólo cambiarías la url. Revisa la documentación de la API externa con la que estes trabajando.
Hola bro una pregunta, estoy intentando usar un shortcode para agregar la tabla donde yo quiero pero no entiendo como quedaria la funcion.
Hola revisa este artículo de referencia: https://decodecms.com/shortcode-para-busqueda-en-tabla-personalizada-en-wordpress/
Buenas
He hecho tu ejemplo. no consigo mostrar un hook en una página.
Un saludo
Hola, supongo que te refieres al hook “the_content”, este también debería funcionar en una página. Podrías probar sólo mostrando un mensaje de ejemplo y ver si aparece.
Hola, tengo la api de me proveedor de productos y quiero agregarla a mi web cin WordPress con woocomerce como deberia hacer? O por donde deberia investigar para lograr lo que quiero. Muchas gracias
Hola Joaquin. De manera general, lo primero sería leer la documentación de la API, ya que cada una tiene una estructura y políticas diferentes. Luego puedes hacer pruebas de conexión usando un programa como PostMan o Insomnia. Si tus pruebas van bien, entonces ya tienes una idea de cómo conectarte, incluso con esos programas te generan el código de conexión. Luego tendrías que crear un plugin para WooCommerce que use ese código y que tenga un Hook de cron que se ejecute cada X tiempo.
Hola Jhon, he visto este tuto y me ha parecido muy genial, yo estoy haciendo unos widgets y se me ha ocurrido crear uno para mostrar la data de un posts desde una API externa, asi que la consulto http://sitio/wp/v2/posts/ID_del_posts y me va a dar en json los valores. Yo he tratado de usar tu secuencia de algoritmo para mostrar en el widget la data formateada en html con css por supuesto. pero me da error.
public function __construct() {
$widget_ops = array(
'classname' => 'rest-api-widget',
'description' => 'A REST API widget that pulls posts from a different website'
);
parent::__construct( 'rest_api_widget', 'REST API Widget', $widget_ops );
}
/**
* Outputs the content of the widget
*
* @param array $args
* @param array $instance
*/
public function widget( $args, $instance ) {
// outputs the content of the widget
$response = wp_remote_get( 'http://sitio/wp/v2/posts/ID_del_posts' );
if( is_wp_error( $response ) ) {
return;
}
$post = json_decode( wp_remote_retrieve_body( $response ) );
if( !empty( $posts ) ) {
foreach( $posts as $post ) {
echo 'link. '">' . $post->title->rendered . '';
}
}
echo $args['after_widget'];
add_action( 'widgets_init', function(){
register_widget( 'REST_API_Widget' );
});
Si alguioen de la comunidad ve algo agradecería que me dijeran.
Gracias
Hola, te sugiero ir depurando el código, por ejemplo comprobar la respuesta, revisa este artículo para aprender como depurar https://decodecms.com/depurar-codigo-php-en-wordpress/
Hola Jhon muy bueno tu curso, muchisimas gracias por la información, tienes algún tutorial como hacer un filtro de busque de una api? o tienes una idea como puedo obtener ayuda.
Hola, en ese caso lo optimo es que el filtro te lo proporcione la misma API, ya que de otro modo no sería óptimo traerte todos los datos para filtrarlos localmente. Revisa la documentación de tu API, es posible que exista esa opción pasándole parámetros a la consulta remota.