我开发了一个简单的短代码插件,它从短代码中提供的url获取txt文件,并解析其中的特定数据段(文件上次修改的日期)。我正在尝试使用WP瞬态将解析的数据缓存24-48小时,然后再重新获取txt文件。我的代码用于对文件的第一次调用,解析后的数据成功地存储在瞬态中,但瞬态似乎永远不会过期,因此可以提取新数据。这是我第一次尝试使用瞬态,所以如果我遗漏了一些愚蠢的东西,我深表歉意。
我正在使用redis对象缓存,但即使禁用redis,瞬态似乎也不会过期。我可以强制更新的唯一方法是更改站点的redis缓存键(这样它实际上会看到一个空缓存)。所以,我认为缓存不是问题,但它可能是。。。
完整代码已打开GitHub here, 但是(我认为)帮助我解决这个bug的相关代码复制如下。
// wp shortcode [lastmodified url="url-value"]
function lastmodified_func( $atts ) {
$a = shortcode_atts( array(
\'url\' => \'\',
), $atts );
return filemtime_remote( $a[\'url\'] );
}
add_shortcode( \'lastmodified\', \'lastmodified_func\' );
// check the last modified value of a url
function filemtime_remote( $url ) {
$moddate = get_transient( \'mod_\' . esc_url( $url ) );
// if list date is due for refresh and max date refreshes for this page request have not been reached
if( false === $moddate ) {
$list = file_get_contents( $url , null , null , 0 , 480 );
// parsing code omitted on stackexchange for brevity
// set random transient timeout between 24 and 48 hrs
$timeout = mt_rand( DAY_IN_SECONDS , DAY_IN_SECONDS * 2 );
// set transient for url updated date
set_transient( \'mod_\' . esc_url( $url ), $moddate , $timeout );
}
return $moddate;
}