You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何记录WordPress中RSS fetch_feed的实际刷新时间并制作短代码?

需求实现方案:记录RSS订阅源实际刷新时间并做成短代码

现有环境与已实现功能

当前环境为WordPress 6.4.2,使用Twenty Twenty-Four主题。已通过以下代码片段控制RSS区块订阅源的刷新间隔:

function return_cache_time( $seconds )
{
// 将默认的Feed缓存重建周期改为10分钟
return (int) 600;
}

// 添加过滤器设置缓存生命周期
add_filter( 'wp_feed_cache_transient_lifetime' , 'return_600' );

$feed = fetch_feed( $feed_url );

// 移除过滤器,将缓存生命周期重置为默认值
remove_filter( 'wp_feed_cache_transient_lifetime' , 'return_cache_time' );

需求

需要记录订阅源的实际刷新时间,并做成短代码,放置在RSS区块旁的页面中。

个人思路:尚未尝试,不清楚入手方向,但了解到仅刷新RSS时WordPress不会将页面视为已修改,推测答案可能与SimplePie有关。


实现方案

1. 核心思路:利用SimplePie获取缓存时间戳

WordPress的fetch_feed()返回的是SimplePie对象,该对象自带缓存相关属性,能直接获取RSS缓存的创建时间(即实际刷新时间)。

2. 编写短代码函数

将获取刷新时间的逻辑封装成短代码,支持传入订阅源URL参数以适配多RSS源场景:

function rss_last_refresh_shortcode( $atts ) {
    // 配置短代码默认参数,用户需传入目标RSS地址
    $atts = shortcode_atts( array(
        'url' => '',
    ), $atts );

    if ( empty( $atts['url'] ) ) {
        return '请指定RSS订阅源URL';
    }

    // 获取SimplePie对象
    $feed = fetch_feed( $atts['url'] );

    if ( is_wp_error( $feed ) ) {
        return '无法获取RSS源信息';
    }

    // 获取缓存创建时间戳
    $cache_timestamp = $feed->get_cache_date();

    if ( empty( $cache_timestamp ) ) {
        return '暂无刷新记录';
    }

    // 用WordPress本地化格式输出时间
    $formatted_time = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $cache_timestamp );

    return 'RSS最后刷新时间:' . $formatted_time;
}
// 注册短代码
add_shortcode( 'rss_last_refresh', 'rss_last_refresh_shortcode' );

3. 短代码使用方式

在页面或文章中添加短代码,传入对应RSS地址即可:
[rss_last_refresh url="https://example.com/feed/"]

4. 注意事项

  • 页面缓存影响:如果站点使用了页面缓存插件,短代码内容可能被静态缓存,导致刷新时间不实时更新。需针对该短代码设置缓存排除规则,或使用动态缓存策略。
  • 缓存规则兼容:短代码会自动沿用你现有代码中设置的RSS缓存周期,无需重复添加过滤器;若需单独控制短代码的缓存逻辑,可在函数内部临时添加/移除wp_feed_cache_transient_lifetime过滤器。

内容的提问来源于stack exchange,提问作者RAC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:02:34