using wp_remote_get instead of file_get_contents

have run my theme through the Theme checker plugin and it seems upset about use of file_get_contents to get a json url. I’ve found posts saying i should use wp_remote_get. I’m currently decoding the url with the following:

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

The message I get from the Theme Checker is:

Read More

WARNING: file_get_contents was found in the file.php possible file operations.

Is it just saying this because there is a function I could possibly use by wordpress or any other reasons? Also how would I use wp_remote_get. I tried a few variations, mostly replacing file_get_contents with wp_remote_get with no luck. Doesn’t seem to decode the url at all.

Related posts

3 comments

  1. If you need to send a JSON response, then there’s a set of functions for that. In case you need that for an AJAX callback:

    Would finally be something like that:

    $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 );
    

    Both wp_send_json_success/_error() functions are wrappers for wp_send_json(), which includes wp_die() at the end. So there’s nothing else to do.

    Keep in mind that 99% of all remote APIs are sending 200/OK in case of errors. You’ll still have to manually inspect the result and check for errors.

  2. You can use wp_remote_get() in the following way:

    $url = 'url' . $var;
    $request =   wp_remote_get($url);
    // Get the body of the response
    $response = wp_remote_retrieve_body( $request );
    // Decode the json
    $output = json_decode( $response ); 
    

    $output now has what you want and now you can go ahead and do your stuff.

    There is a also a series of tutorials on wp_remote_get(). Go through it, it will definitely help.

    Link — Tutorial

    Hope it helps.

Comments are closed.