Utilizzare wp_remote_get invece di file_get_contents
Ho eseguito il mio tema attraverso il plugin Theme Checker e sembra non gradire l'uso di file_get_contents
per ottenere un URL JSON. Ho trovato post che suggeriscono di utilizzare wp_remote_get
. Attualmente sto decodificando l'URL nel seguente modo:
$url = 'url' . $var;
$json = file_get_contents($url,0,null,null);
$output = json_decode($json,true);
Il messaggio che ricevo dal Theme Checker è:
WARNING: file_get_contents è stato trovato nel file.php possibili operazioni su file.
Lo sta segnalando solo perché c'è una funzione che potrei utilizzare fornita da WordPress o ci sono altre ragioni? Inoltre, come dovrei utilizzare wp_remote_get
? Ho provato alcune varianti, principalmente sostituendo file_get_contents con wp_remote_get
senza successo. Non sembra decodificare l'URL affatto.

Se hai bisogno di inviare una risposta JSON, esiste un insieme di funzioni apposite. Nel caso ti serva per una callback AJAX:
wp_remote_retrieve_response_message()
wp_remote_retrieve_response_code()
wp_send_json_success()
wp_send_json_error()
wp_send_json()
Alla fine risulterà qualcosa di simile a questo:
$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 );
Sia le funzioni wp_send_json_success/_error()
che sono wrapper per wp_send_json()
, includono wp_die()
alla fine. Quindi non c'è altro da fare.
Tieni presente che il 99% delle API remote invia 200/OK
anche in caso di errori. Dovrai comunque ispezionare manualmente il risultato e verificare la presenza di errori.

Utilizza wp_remote_get() in combinazione con wp_remote_retrieve_body()
Esempio
<?php
$request = wp_remote_get('http://example.com');
$response = wp_remote_retrieve_body( $request );
echo $response;
?>
Consulta la documentazione per i possibili argomenti

Ciao, grazie, sembra che riesca a visualizzare tutto il contenuto ma quando provo a ottenere solo alcuni valori specifici all'interno del file json, ad esempio $response['companyname'], ottengo solo un '{'

Se il corpo di un documento è anche un file json allora usa json_encode()

Puoi utilizzare wp_remote_get()
nel seguente modo:
$url = 'url' . $var;
$request = wp_remote_get($url);
// Ottieni il corpo della risposta
$response = wp_remote_retrieve_body( $request );
// Decodifica il json
$output = json_decode( $response );
$output
ora contiene ciò che desideri e puoi procedere con le tue operazioni.
Esiste anche una serie di tutorial su wp_remote_get()
. Consultali, ti saranno sicuramente utili.
Link -- Tutorial
Spero che sia d'aiuto.
