为什么瞬变可能无法正常工作?

时间:2012-12-17 作者:Marvin3

我有一个插件,需要检查更新。下面的函数-当有人进入插件管理页面时,会触发get\\u version\\u to\\u update。理论上,请求完成后,数据应通过瞬态缓存24小时。这适用于大多数站点,但对于某些特定站点,我得到的数据是wp\\u remote\\u请求反复触发的,这(我认为)意味着transient无法保存。

为什么会发生这种情况?有没有更可靠的方法来检查这一点?

public function get_version_to_update(){

    // I get the transient
    $data = get_transient("my_plugin_remote_version");

    // I check if it exists
    if($data === false){
        // here I get data from server using wp_remote_request, server return just version number, e.g. "2.0"   
        $data = wp_remote_request(...);

        // I cache it for 24h
        set_transient("my_plugin_remote_version", $data, 60 * 60 * 24);
    }

     // I check if returned data from server is correct
     if ( !$data || is_wp_error( $data ) || 200 != $data[\'response\'][\'code\']) {
        return false;
     } else {
        if( version_compare(MY_PLUGIN_VERSION, $new_version, \'<\') ) {
                    // return new version, if it\'s newer then current 
            return $data[\'body\'];
        } else {
            return false;
        }
     }
}
这个问题快把我累死了,谢谢你的帮助!

1 个回复
SO网友:Mark Kaplun

根据定义和使用模式,瞬变可以在任何时间点删除,过期时间参数实际上只指定maximal time 将缓存该值。这可能是因为特定的站点存在无法及时清理瞬态的问题,并使用一些代码每小时自动清理一次。我认为使用options和cron进行缓存比临时缓存更可靠,但如果只是一个奇怪的站点出现了错误行为,那么这可能不值得您付出努力。

结束

相关推荐

Transients API and multisite

我们正在使用Atlas HTML站点地图插件,该插件使用transients API缓存站点地图,调用如下:set_transient( \'dmac_html_sitemap\', $output, 60*60*24*7 ); 现在,我们还有一个多站点设置,我想知道瞬态存储在哪里,WP multisite是否将它们分开。它将选项分开,因为每个站点(博客)都有自己的DB表前缀(例如wp\\U 29\\U选项)。我在某个地方读到,瞬态可以用memcached存储,所以我猜后端存储是可插入的。这个问