diff --git a/src/app/news/[id]/page.tsx b/src/app/news/[id]/page.tsx
index 461d35b..b2818ee 100644
--- a/src/app/news/[id]/page.tsx
+++ b/src/app/news/[id]/page.tsx
@@ -2,7 +2,7 @@ import { notFound } from "next/navigation";
import { getNewsById } from "@/lib/directus/news";
import type { NewsItem } from "@/types/news";
import NewsDetail from "@/components/news/NewsDetail";
-
+export const dynamic = "force-dynamic";
export const revalidate = 3600;
export default async function NewsDetailPage({ params }: { params: Promise<{ id: string }> }) {
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 20e2530..e97cdbb 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -47,18 +47,27 @@ export default async function Home() {
);
- // linkurl があればクリック可能に
- return item.linkurl ? (
+ // --- 事前にURL文字列を確定 ---
+ const url = item.linkurl?.trim() ?? "";
+ const hasValidLink = url !== "" && url.toLowerCase() !== "none";
+
+ const href: string = hasValidLink
+ ? /^https?:\/\//.test(url)
+ ? url // 外部URL
+ : url.startsWith("/")
+ ? url // 内部スラッグ (/page 等)
+ : `/news/${url}` // 相対指定は /news/配下として扱う
+ : `/news/${item.id}`; // 「リンクなし」時は詳細へ
+
+ return (
{content}
- ) : (
-
{content}
);
})}
diff --git a/src/lib/directus/news.ts b/src/lib/directus/news.ts
index 7d13605..a80937a 100644
--- a/src/lib/directus/news.ts
+++ b/src/lib/directus/news.ts
@@ -5,19 +5,45 @@ import { NewsItem } from "@/types/news";
* 最新ニュース5件取得
*/
export async function getLatestNews(): Promise {
- return await directusFetch(
- `/items/news?sort[]=-published_at&limit=5&fields[]=id&fields[]=title&fields[]=slug&fields[]=published_at&fields[]=thumbnail.id&fields[]=thumbnail.filename_disk&fields[]=linkurl&fields[]=link_target&fields[]=tags`
- );
-}
+ const query = [
+ "filter[status][_eq]=1", // ✅ 公開=1 のみ取得
+ "sort[]=-published_at",
+ "limit=5",
+ "fields[]=id",
+ "fields[]=title",
+ "fields[]=slug",
+ "fields[]=published_at",
+ "fields[]=thumbnail.id",
+ "fields[]=thumbnail.filename_disk",
+ "fields[]=linkurl",
+ "fields[]=link_target",
+ "fields[]=tags",
+ ].join("&");
+
+ return await directusFetch(`/items/news?${query}`);
+ }
/**
* 全ニュース一覧取得
*/
export async function getAllNews(): Promise {
- return await directusFetch(
- `/items/news?sort[]=-published_at&fields[]=id&fields[]=title&fields[]=slug&fields[]=published_at&fields[]=thumbnail.id&fields[]=thumbnail.filename_disk&fields[]=linkurl&fields[]=link_target&fields[]=tags&fields[]=content`
- );
-}
+ const query = [
+ "filter[status][_eq]=1", // ✅ 公開=1 のみ取得
+ "sort[]=-published_at",
+ "fields[]=id",
+ "fields[]=title",
+ "fields[]=slug",
+ "fields[]=published_at",
+ "fields[]=thumbnail.id",
+ "fields[]=thumbnail.filename_disk",
+ "fields[]=linkurl",
+ "fields[]=link_target",
+ "fields[]=tags",
+ "fields[]=content",
+ ].join("&");
+
+ return await directusFetch(`/items/news?${query}`);
+ }
/**
* ニュースID指定で詳細取得