WordPress自动发文防重复实战:从12个话题扩展到32个

问题:每天发一篇,为什么内容越来越重复?

用脚本自动发文,时间长了很容易陷入一个困境:话题就那么几个,翻来覆去写,写到最后自己都不想看了。更糟糕的是,同一个话题隔几天又被脚本随机抽中,发出来跟之前高度相似。

最近帮博客做了一次系统升级,把这个问题彻底解决了。记录一下思路,供有同样困扰的朋友参考。

一、扩大选题池:别让话题”不够用”

很多人选题池就5-10个话题,看似很多,实际上很多话题写法相似(比如”XXX来了”这类新闻标题),去掉之后真正可写的不多。

这次把选题池扩展到32个,分了10个类别:

  • Claude / Anthropic 系列(Claude 4、Claude Code 体验)
  • AI 协议 / 生态(MCP 协议解读、MCP 工具开发)
  • AI Agent 系列(AutoGen、扣子/Coze 平台测评)
  • RAG / 本地部署(Ollama、AnythingLLM、向量模型横评)
  • 国产大模型(豆包、通义、DeepSeek、文心)
  • AI 编程工具(Cursor vs Copilot vs Claude Code)
  • 大模型技术原理(上下文窗口、Context Caching、CoT 思维链)
  • 硬件评测(手机、游戏掌机)
  • 工具与技巧(Perplexity 搜索、AI 笔记工具对比)
  • AI 与职业(程序员生存指南、AI 接私活攻略)

分类的好处是:写的时候可以按类别轮着来,不会集中在某一类。

二、选题历史记录:30天不重复同一话题

这是最关键的一步。脚本维护一个历史记录文件(JSON格式),每次发文后把标题和日期记下来。下次选话题时,先查历史,30天内出现过的标题直接跳过。

核心逻辑很简单:

import json
from datetime import datetime, timedelta

HISTORY_FILE = "topic_history.json"
AVOID_DAYS = 30

def load_history():
    with open(HISTORY_FILE) as f:
        return json.load(f)

def get_recent_titles(history, days=30):
    cutoff = (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d")
    return {item["title"] for item in history["posted"] if item["date"] >= cutoff}

def pick_topic(pool, history):
    recent = get_recent_titles(history)
    available = [t for t in pool if t["title"] not in recent]
    if not available:
        available = pool  # 全部用完了,从头再来
    return random.choice(available)

加上这段逻辑之后,脚本就不会再抽到30天内发过的话题了。

三、话题分组(group)标记:防止隐性重复

有时候标题不同,但话题高度相似——比如”Claude 4来了”和”Claude 4实测”其实是同一个话题。

在选题池里给每个话题加一个 group 字段:

{
    "title": "Claude 4来了:程序员工作方式将被彻底改变",
    "group": "claude",
},
{
    "title": "实测一个月Claude Code:它真的能替代我写代码吗?",
    "group": "claude",  # 同组,不连发
}

配合历史记录双重保险,从根本上杜绝隐性重复。

四、定向发文脚本:手动控制不发错

有时候想主动发一篇特定话题,而不是让脚本随机抽。写了一个简单的定向脚本 publish_one.py:

python3 publish_one.py "Perplexity替代Google搜索?用了3个月后我的真实感受" Perplexity 2026-04-24

传入话题标题、图片关键词、目标日期,直接生成并发布到 WordPress。

五、事后清理:把历史积累的重复帖子删掉

如果博客已经积累了大量重复帖子,可以写一个小脚本批量清理。我的做法是:

  1. 拉取最近30天所有帖子列表
  2. 按标题相似度(编辑距离)聚类
  3. 保留最新一篇,删除其余重复

WordPress REST API 支持直接批量删除:

DELETE https://yoursite.com/wp-json/wp/v2/posts/{id}?force=true

总结

防止自动发文重复,核心就三件事:

  • 池子够大:32+个话题,覆盖多个方向
  • 记录历史:30天去重,不让同一话题频繁出现
  • 定期复盘:积累的重复帖子要主动清理

自动化的本质是省力,但自动化不等于听天由命。偶尔主动干预一下,质量会比纯随机好很多。

发表评论