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

Next.js ISR+revalidateTag无法更新WordPress(Pods)数据求助

解决Next.js重新验证缓存无效:LightSpeed Cache拦截WordPress REST API请求的问题

问题场景

我用Next.js开发的页面通过以下代码从WordPress(Pods)获取内容,设置了5分钟(300秒)的缓存有效期和缓存标签home-content:

// helper
const data = await wpFetch<Content[]>(
  process.env.WP_PAGE_CONTENT_URL!, 
  { revalidate: 300, tag: 'home-content' }
);

同时实现了重新验证API路由,支持按标签或路径清除Next.js缓存:

// app/api/revalidate/route.ts
export const runtime = 'nodejs';
import { revalidateTag, revalidatePath } from 'next/cache';

export async function POST(req: Request) {
  const { secret, tag, path } = await req.json();
  if (secret !== process.env.REVALIDATE_SECRET) return new Response('Unauthorized', { status: 401 });
  if (tag)  revalidateTag(tag);
  if (path) revalidatePath(path);
  return Response.json({ ok: true, tag, path });
}

但遇到了问题:在WordPress更新内容后,调用这个API传入tag:"home-content"和path:"/",页面数据完全没更新;哪怕把revalidate设为0也没用。删除.next/cache目录、重启应用都解决不了,只有给WordPress的请求URL加个随机查询参数(比如?v=123),才能拿到新数据。

根因

排查后发现是LightSpeed Cache插件在缓存匿名用户的WordPress REST API JSON响应——哪怕Next.js清空了自己的缓存,再次请求WP API时,拿到的还是LightSpeed Cache返回的旧数据,根本没触发WP后端的最新内容查询。

解决方案

方案1:让LightSpeed Cache排除目标REST API端点(推荐)

  1. 登录WordPress后台,打开LightSpeed Cache的设置页面
  2. 找到「缓存」分类下的「排除设置」(不同版本界面可能略有差异,找不到的话搜“排除URL”)
  3. 在「排除URL」或「排除REST API」的输入框里,添加你的WP内容API的完整路径(比如/wp-json/pods/v2/content/,具体路径看process.env.WP_PAGE_CONTENT_URL的值)
  4. 保存设置,然后清空LightSpeed Cache的缓存

方案2:在Next.js请求中添加缓存控制头强制跳过LightSpeed缓存

如果暂时没法修改WP的缓存设置,可以给wpFetch的请求加缓存控制头,让LightSpeed Cache不缓存这个请求:

const data = await wpFetch<Content[]>(
  process.env.WP_PAGE_CONTENT_URL!, 
  { 
    revalidate: 300, 
    tag: 'home-content',
    headers: {
      'Cache-Control': 'no-cache, no-store, must-revalidate'
    }
  }
);

注意:这个设置会让Next.js也不缓存该请求(因为no-store会覆盖revalidate配置),如果需要保留Next.js的5分钟本地缓存,优先用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 12:00:02