Usando wp_remote_get en lugar de file_get_contents
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.

Si necesitas enviar una respuesta JSON, existe un conjunto de funciones para ello. En caso de que lo necesites para un callback AJAX:
wp_remote_retrieve_response_message()
wp_remote_retrieve_response_code()
wp_send_json_success()
wp_send_json_error()
wp_send_json()
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.

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

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 '{'

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

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.
