Utilizzare wp_remote_get invece di file_get_contents

27 set 2013, 12:35:22
Visualizzazioni: 34.9K
Voti: 11

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.

5
Commenti

Questa domanda/risposta può aiutarti

cybmeta cybmeta
27 set 2013 12:45:12

ciao, grazie per questo, è stato utile, quindi ho dedotto che diceva che wp-Remote fa già tutto il decoding per me? Quindi ho fatto $url = 'url' . $var; $output = wp_remote_get( $url ); ma non ha funzionato

David David
27 set 2013 13:01:17

Devi rileggere il link che ho postato. Se fai $output = wp_remote_get( $url ); l'$output sarà un array dove puoi accedere a $output['headers'], $output['body']. Penso che quello che vuoi sia $json = json_decode($output['body']);

cybmeta cybmeta
27 set 2013 13:05:01

Non utilizzare json_decode($output['body'] ma usa invece wp_remote_retrieve_body( $output )

Horttcore Horttcore
27 set 2013 13:10:44

Nonostante sia stata chiusa come duplicato, questa domanda è scritta molto meglio e affronta il singolo problema di come iniziare a usare wp_remote_get al posto di file_get_contents o file_get_contents_curl - e poiché la domanda è più chiara, le risposte sono migliori e più facili da comprendere.

squarecandy squarecandy
26 ago 2020 21:27:03
Tutte le risposte alla domanda 3
0
11

Se hai bisogno di inviare una risposta JSON, esiste un insieme di funzioni apposite. Nel caso ti serva per una callback AJAX:

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.

27 set 2013 22:11:01
3

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

27 set 2013 13:25:47
Commenti

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 David
3 ott 2013 14:03:59

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

Horttcore Horttcore
8 ott 2013 16:07:15

wp_remote_retrieve_body è utile perché verifica che non ci siano errori e restituisce anche una stringa vuota se $request['body'] non è impostato.

squarecandy squarecandy
26 ago 2020 21:31:46
0

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.

27 set 2013 14:45:07