実現したいこと
docker環境下で作成したWordpressをヘッドレスCMSとして使用し、静的ファイルをビルドしたい。
前提
以下のサイトを参考に、Next.js + TypeScript + docker + Wordpress + GraphQL でwebサイトを作成しております。
https://zenn.dev/masahiro_dev/articles/migrate-wordpress-to-nextjs
その中で、お知らせ一覧から詳細ページにリンクするDynamic Routesの設定が原因で、ビルドした時にエラーが発生します。
↓以下補足
・dockerを起動した開発環境だと、問題なく詳細ページは表示されます。
・詳細ページ(/post/[slug])をファイルに含まなければ、ビルドできます。
発生している問題・エラーメッセージ
↓ビルドした時に以下のエラーが表示されます。
Collecting page data .TypeError: fetch failed
〜略〜
Build error occurred
Error: Failed to collect page data for /post/[slug]
該当のソースコード
お知らせ詳細ページの記述です。GraphQLを使用して取得しております。
export async function generateStaticParams() { const res = await fetch(`${process.env.WP_API_URL}?_=${new Date().getTime()}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: ` { posts { nodes { slug } } } `, }), }); const { data } = await res.json(); if (!data || !data.posts) { console.error("No posts found"); return []; } const postSlugs = data.posts.nodes.map((post: { slug: string }) => ({ slug: post.slug, })); return postSlugs; } export default async function PostPage({ params, }: { params: { slug: string }; }) { const res = await fetch(`${process.env.WP_API_URL}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query: ` query GetPostBySlug($slug: String!) { postBy(slug: $slug) { title content date } } `, variables: { slug: params.slug, }, }), next: { revalidate: 10 }, }); const { data } = await res.json(); if (!data || !data.postBy) { return ( <div> <p>お知らせはありません。</p> </div> ); } const post = data.postBy; return ( <div> <h>{post.title}</h1> <p><time>{post.date}</time></p> <article className="article" dangerouslySetInnerHTML={{ __html: post.content }} /> </div> ); }
あなたの回答
tips
プレビュー