Question

Using wp_remote_get keeps pinging the API on every page load. Which increase the server resource.

Is it possible to cache the response of the API store it using Transients and use it for next 5 minutes instead of keep pinging everytime?

And After 5 Minutes it should send request again and rewrite the stored value.

Here is my code for API Request. How to do this? I'm new to this. Help me please

function display_api_response() {
    $api_url = "https://randletter2020.herokuapp.com";
$response = wp_remote_get($api_url);
   if ( 200 === wp_remote_retrieve_response_code($response) ) {
        $body = wp_remote_retrieve_body($response);

        if ( 'a' === $body ) {
          echo 'A wins';
        }else {
          // Do something else.
        }
   }
}
add_action( 'init', 'display_api_response' );
Était-ce utile?

La solution

function display_api_response() {
    $body = get_transient( 'my_remote_response_value' );
    
    if ( false === $body ) {
        $api_url = "https://randletter2020.herokuapp.com";
        $response = wp_remote_get($api_url);
    
        if (200 !== wp_remote_retrieve_response_code($response)) {
            return;
        }
    
        $body = wp_remote_retrieve_body($response);
        set_transient( 'my_remote_response_value', $body, 5*MINUTE_IN_SECONDS );
    }

    if ('a' === $body) {
        echo 'A wins';
    } else {
        // Do something else.
    }
}
add_action('init', 'display_api_response');

At first, the transient doesn't exist, so we send a request and save the $body as a transient value. Next time, if the transient exists, we skip sending request.

Check the Transient Handbook for more information.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top