Usando wp_remote_get en lugar de file_get_contents

27 sept 2013, 12:35:22
Vistas: 34.9K
Votos: 11

He ejecutado mi tema a través del plugin Theme Checker y parece que no está conforme con el uso de file_get_contents para obtener una URL JSON. He encontrado publicaciones que dicen que debería usar wp_remote_get. Actualmente estoy decodificando la URL de la siguiente manera:

$url = 'url' . $var;
$json = file_get_contents($url,0,null,null);
$output = json_decode($json,true); 

El mensaje que recibo del Theme Checker es:

ADVERTENCIA: se encontró file_get_contents en el archivo file.php, posibles operaciones de archivo.

¿Está diciendo esto solo porque hay una función que podría usar de WordPress u otras razones? También, ¿cómo usaría wp_remote_get? Intenté algunas variaciones, principalmente reemplazando file_get_contents con wp_remote_get sin éxito. No parece decodificar la URL en absoluto.

5
Comentarios

Esta pregunta/respuesta puede ayudarte

cybmeta cybmeta
27 sept 2013 12:45:12

hola, gracias por eso, sí ayudó, así que asumí que decía que wp-Remote ya hacía todo el decoding por mí? Así que hice $url = 'url' . $var; $output = wp_remote_get( $url ); pero no funcionó

David David
27 sept 2013 13:01:17

Tienes que leer nuevamente el enlace que publiqué. Si haces $output = wp_remote_get( $url ); el $output será un array donde puedes acceder a $output['headers'], $output['body']. Creo que lo que quieres es $json = json_decode($output['body']);

cybmeta cybmeta
27 sept 2013 13:05:01

No uses json_decode($output['body'], en su lugar utiliza wp_remote_retrieve_body( $output )

Horttcore Horttcore
27 sept 2013 13:10:44

A pesar de estar marcada como duplicada, esta pregunta está mucho mejor redactada y trata específicamente el tema de cómo empezar a usar wp_remote_get en lugar de file_get_contents o file_get_contents_curl. Al estar más clara la pregunta, las respuestas son mejores y más fáciles de entender.

squarecandy squarecandy
26 ago 2020 21:27:03
Todas las respuestas a la pregunta 3
0
11

Si necesitas enviar una respuesta JSON, existe un conjunto de funciones para ello. En caso de que lo necesites para un callback AJAX:

Finalmente, sería algo así:

$request  = wp_remote_get( 'http://example.com' );
$response = wp_remote_retrieve_body( $request );
if ( 
    'OK' !== wp_remote_retrieve_response_message( $response )
    OR 200 !== wp_remote_retrieve_response_code( $response )
)
    wp_send_json_error( $response );

wp_send_json_success( $response );

Ambas funciones wp_send_json_success/_error() son envoltorios para wp_send_json(), que incluye wp_die() al final. Así que no hay nada más que hacer.

Ten en cuenta que el 99% de todas las APIs remotas envían 200/OK en caso de errores. Aún tendrás que inspeccionar manualmente el resultado y comprobar si hay errores.

27 sept 2013 22:11:01
3

Utiliza wp_remote_get() en conjunto con wp_remote_retrieve_body()

Ejemplo

<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>

Consulta la documentación para ver los posibles argumentos

27 sept 2013 13:25:47
Comentarios

Hola, gracias, parece que puedo imprimir todo el contenido pero cuando intento obtener solo ciertos valores dentro del archivo json, por ejemplo $response['companyname'], solo obtengo un '{'

David David
3 oct 2013 14:03:59

Si el cuerpo de un documento también es un archivo json entonces usa json_encode()

Horttcore Horttcore
8 oct 2013 16:07:15

wp_remote_retrieve_body es bueno porque verifica que no haya errores y también devuelve una cadena vacía si $request['body'] no está configurado.

squarecandy squarecandy
26 ago 2020 21:31:46
0

Puedes usar wp_remote_get() de la siguiente manera:

$url = 'url' . $var;
$request = wp_remote_get($url);
// Obtener el cuerpo de la respuesta
$response = wp_remote_retrieve_body($request);
// Decodificar el JSON
$output = json_decode($response);

$output ahora contiene lo que necesitas y puedes proceder con lo que requieras.

También existe una serie de tutoriales sobre wp_remote_get(). Revísalos, definitivamente te serán de ayuda.

Enlace -- Tutorial

Espero que te sea útil.

27 sept 2013 14:45:07