我正在使用WP REST API将博客帖子拉到另一个站点。一切都很好,但现在我需要将结果保存到瞬态中,以防止每次都查询博客。我不熟悉瞬态,也不熟悉WP REST api,所以我正在寻找正确/最好的方法来实现这一点。
我有一个函数get\\u blog\\u posts\\u by\\u tags($tags),它使用WP REST API检索帖子。在变量中得到结果后,我设置瞬态。但是,$标记可能会在显示这些帖子的页面之间发生变化。如何检查新的WP REST API查询是否与瞬态中已存储的查询相同/不同?
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;
}
我考虑将WP API查询存储到另一个瞬态中,然后每次使用get\\u transient(),并检查瞬态内容(查询WP API查询)是否与新的WP API查询匹配。但这似乎有点多余,我不确定这是最好的方法。
最合适的回答,由SO网友:gmazzap 整理而成
根据OP中的代码,唯一改变结果的是$tags
变量
在这种情况下,最简单的方法是$tags
临时名称的一部分。
function get_posts_by_tags($tags){
$transient = \'rest-posts-\' . md5(serialize($tags));
if(false === ($result = get_transient($transient))) {
// the rest of yout function here ...
if (!is_wp_error($data)){
$result = json_decode( $data );
set_transient($transient, $result, 24 * HOUR_IN_SECONDS);
}
}
return $result;
}
所以对于每个
$tags
有一个瞬态。
如果不同页面的结果相同$tags
它们将查询(并存储)相同的瞬态,并且一切都应按预期工作。