如何记录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
相关产品推荐
相关产品推荐

