I am using WP REST API to pull blog posts into another site. Everything works great, but now I need to save the results into transients to prevent querying the blog every time. I am new to transients and also new to WP REST api, so I am looking for the correct/best way to do this.
I have a function get_blog_posts_by_tags($tags) which uses the WP REST API to retrieve the posts. Once I have the results in a variable I set the transient. However, $tags might change from page to page where these posts are displayed. How do I go about checking if the new WP REST API query is the same/different from the one already stored in the transient?
function get_posts_by_tags($tags){
if(false === ($result = get_transient('rest-posts'))) {
$args = array(
'filter[orderby]' => 'date',
'filter[posts_per_page]' => 4,
'filter[order]' => 'DESC',
'filter[post_status]' => 'publish',
'filter[tag]' => $tags,
);
$url = 'http://blog.myblog.com/wp-json/posts';
$url = add_query_arg($args,$url);
$response = wp_remote_get($url);
//Check for error
if (is_wp_error($response)) {
return sprintf( 'The URL %1s could not be retrieved.', $url);
}
//get just the body
$data = wp_remote_retrieve_body($response);
//return if not an error
if (!is_wp_error($data)){
//decode and return
$result = json_decode( $data );
set_transient('rest-posts', $result,24 * HOUR_IN_SECONDS);
}
}
return $result;
}
I thought about storing the WP API query into another transient and then use get_transient() every time and check if the transient content (the query wp api query) matches the new wp api query. But that seems a bit redundant and I am not sure it's the best approach.