修复归档页面bug

This commit is contained in:
Vaica committed 2026-01-21 12:34:55 +08:00
1 parent 8352af3610
commit 17412a5f58
17 files changed
+67 -39

No files matched your search

+48 -20
View File
@@ -1,27 +1,38 @@
<#
.SYNOPSIS
将所有包含 'status: hidden' 的文章标记为草稿 (draft: true)。
将所有包含 'status: hidden' 的文章标记为草稿 (draft: true),并清理冲突的设置。
.DESCRIPTION
此脚本用于批量处理 Hugo 文章。它会遍历 content/post 目录下的所有 .md 文件,
解析 Front Matter。如果发现 'status: hidden' 且没有 'draft: true',
则会在 'status: hidden' 下一行添加 'draft: true',以确保 Hugo 不会生成这些页面。
此脚本用于批量处理 Hugo 文章。它会遍历 content/post 目录下的所有 .md 文件。
如果发现 'status: hidden':
1. 将 'draft: false' 修改为 'draft: true'。
2. 注释掉冲突的 'status: public' 设置。
3. 如果没有 'draft: true',则添加它。
脚本包含安全检查:
1. 确保读取和写入使用 UTF-8 编码。
2. 确保新内容不为空。
3. 确保文件大小没有异常减小(防止数据丢失)。
3. 确保文件大小没有异常减小。
.EXAMPLE
.\scripts\add_draft_to_hidden.ps1
#>
$postsPath = "content/post"
# Ensure path exists
if (-not (Test-Path $postsPath)) {
Write-Error "Path not found: $postsPath"
exit 1
}
$files = Get-ChildItem -Path $postsPath -Recurse -Filter "*.md"
$count = 0
Write-Host "Starting scan for hidden posts..." -ForegroundColor Cyan
Write-Host "Starting scan for hidden posts cleanup..." -ForegroundColor Cyan
# Set console encoding to UTF8 to correctly display filenames
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
foreach ($file in $files) {
# Read with UTF8
@@ -32,19 +43,36 @@ foreach ($file in $files) {
continue
}
# Check for 'status: hidden'
if ($content -match "(?m)^status:\s*hidden") {
$modified = $false
$newContent = $content
# Check for 'status: hidden' or 'status: "hidden"'
if ($content -match "(?m)^status:\s*(`"hidden`"|hidden)") {
# Check if 'draft: true' is already present
if ($content -notmatch "(?m)^draft:\s*true") {
Write-Host "Processing: $($file.Name)"
# Use regex replace
# Capture the status: hidden line and append draft: true
# Note: `n is newline in PowerShell
$newContent = $content -replace "(?m)(^status:\s*hidden.*$)", "`$1`ndraft: true"
# SAFETY CHECK: Ensure new content is not empty and size is reasonable
# 1. Replace draft: false -> draft: true
if ($newContent -match "(?m)^draft:\s*false") {
$newContent = $newContent -replace "(?m)^draft:\s*false", "draft: true"
$modified = $true
Write-Host " Fixed 'draft: false' in $($file.Name)" -ForegroundColor Yellow
}
# 2. Comment out status: public / status: "public"
if ($newContent -match "(?m)^status:\s*(`"public`"|public)") {
$newContent = $newContent -replace "(?m)(^status:\s*(`"public`"|public))", "# `$1 # Auto-hidden by script"
$modified = $true
Write-Host " Commented out 'status: public' in $($file.Name)" -ForegroundColor Yellow
}
# 3. Ensure draft: true exists
if ($newContent -notmatch "(?m)^draft:\s*true") {
# Append after status: hidden
$newContent = $newContent -replace "(?m)(^status:\s*(`"hidden`"|hidden).*$)", "`$1`ndraft: true"
$modified = $true
Write-Host " Added 'draft: true' to $($file.Name)" -ForegroundColor Yellow
}
if ($modified) {
# SAFETY CHECK: Ensure new content is not empty and size is reasonable
if ([string]::IsNullOrEmpty($newContent) -or $newContent.Length -eq 0) {
Write-Error "CRITICAL: New content is empty for $($file.Name). Skipping save."
continue
@@ -56,9 +84,9 @@ foreach ($file in $files) {
continue
}
# Save file using .NET method to ensure UTF8 no BOM (or compatible UTF8)
# Save file using .NET method to ensure UTF8
[System.IO.File]::WriteAllText($file.FullName, $newContent, [System.Text.Encoding]::UTF8)
Write-Host " -> Updated." -ForegroundColor Green
Write-Host " -> Saved changes to $($file.Name)" -ForegroundColor Green
$count++
}
}