如果查询发生变化,如何保存新的瞬变信息?

时间:2015-07-10 作者:gdaniel

我正在使用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查询匹配。但这似乎有点多余,我不确定这是最好的方法。

1 个回复
最合适的回答,由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 它们将查询(并存储)相同的瞬态,并且一切都应按预期工作。

结束

相关推荐

Clear Transients

我已经为我的一个客户构建了一个自定义主题,我正在使用瞬态,以使站点运行更快。一周后,我在wp\\U选项中看到了大量瞬态记录(约360000条记录)。这使我怀疑瞬态不会从数据库中删除。如何删除该记录,以及如何删除?有什么好的教程吗?亲切的问候