articles/[slug]: drop Stay Updated sidebar card; related fallback to latest
Empty Related Articles bug on /articles/<slug> traced to two issues: - Two rows were imported with category="industry" instead of the canonical "Industry News", so the category-match query returned zero peers. - The fallback path was missing — getLegacyRelatedArticles now tops up with the latest published rows whenever the category match is short. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -424,17 +424,6 @@ export default function ArticleDetailClient({ article, relatedArticles }: Articl
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Newsletter Signup */}
|
||||
<div className="bg-[#0d1520] border border-[#1e3a5f] p-5">
|
||||
<h3 className="font-heading text-[#e0e0e0] font-bold mb-2">Stay Updated</h3>
|
||||
<p className="font-body text-[#777] text-xs mb-4">
|
||||
Get the latest broadcast engineering news delivered to your inbox.
|
||||
</p>
|
||||
<Link href="/home-page#newsletter" className="btn-subscribe text-xs py-2 px-4 inline-block w-full text-center">
|
||||
Subscribe Free
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
{/* Sidebar ad stack — 300x600 + 300x250 rotating */}
|
||||
<SidebarAdStack />
|
||||
</aside>
|
||||
|
||||
@@ -252,21 +252,42 @@ export async function getLegacyRelatedArticles(
|
||||
category: string | null,
|
||||
count: number,
|
||||
): Promise<Article[]> {
|
||||
try {
|
||||
let q = client()
|
||||
.from("wp_imported_posts")
|
||||
.select(SELECT_COLS)
|
||||
.eq("status", "published")
|
||||
.neq("wp_slug", excludeSlug)
|
||||
.order("wp_published_at", { ascending: false })
|
||||
.limit(count);
|
||||
if (category) q = q.eq("category", category);
|
||||
const { data, error } = await q;
|
||||
if (error || !data) return [];
|
||||
return (data as ImportedPostRow[]).map((r) => rowToArticle(r));
|
||||
} catch {
|
||||
return [];
|
||||
const collected: ImportedPostRow[] = [];
|
||||
const seen = new Set<string>([excludeSlug]);
|
||||
// First pass: same category. Skip when no category recorded.
|
||||
if (category) {
|
||||
try {
|
||||
const { data } = await client()
|
||||
.from("wp_imported_posts")
|
||||
.select(SELECT_COLS)
|
||||
.eq("status", "published")
|
||||
.eq("category", category)
|
||||
.neq("wp_slug", excludeSlug)
|
||||
.order("wp_published_at", { ascending: false })
|
||||
.limit(count);
|
||||
for (const row of (data as ImportedPostRow[] | null) || []) {
|
||||
if (!seen.has(row.wp_slug)) { collected.push(row); seen.add(row.wp_slug); }
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
// Fallback: top up to `count` with the latest published, excluding what we
|
||||
// already have. Handles tiny categories, orphan rows, and category=null.
|
||||
if (collected.length < count) {
|
||||
try {
|
||||
const { data } = await client()
|
||||
.from("wp_imported_posts")
|
||||
.select(SELECT_COLS)
|
||||
.eq("status", "published")
|
||||
.neq("wp_slug", excludeSlug)
|
||||
.order("wp_published_at", { ascending: false })
|
||||
.limit(count + collected.length + 5);
|
||||
for (const row of (data as ImportedPostRow[] | null) || []) {
|
||||
if (collected.length >= count) break;
|
||||
if (!seen.has(row.wp_slug)) { collected.push(row); seen.add(row.wp_slug); }
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
return collected.map((r) => rowToArticle(r));
|
||||
}
|
||||
|
||||
export async function getLegacyArticlesBySection(
|
||||
|
||||
Reference in New Issue
Block a user