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 '{'
David
Se il corpo di un documento è anche un file json allora usa json_encode()
Horttcore
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.