You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQL批量修改WordPress文章分类:按创建年份归类

批量将WordPress文章按发布年份从Uncategorized分类迁移到对应年份分类

先明确WordPress分类关联逻辑(纠正认知偏差)

你之前对表关联的理解存在一点错误,正确的关联链是:

  • wp_posts.ID ↔ wp_term_relationships.object_id(文章ID关联关系表的对象ID)
  • wp_term_relationships.term_taxonomy_id ↔ wp_term_taxonomy.term_taxonomy_id(关系表关联分类taxonomy表)
  • wp_term_taxonomy.term_id ↔ wp_terms.term_id(taxonomy表关联分类名称表)

简单来说:wp_term_relationships里存储的是term_taxonomy_id,而非wp_terms的term_id,这是影响SQL正确性的关键细节。


操作步骤(务必先备份数据库!)

1. 获取目标年份分类的term_taxonomy_id

假设你已创建2010分类且其term_id为3,执行以下SQL拿到对应的term_taxonomy_id(记好这个值,比如假设结果是3):

SELECT term_taxonomy_id 
FROM wp_term_taxonomy 
WHERE term_id = 3 AND taxonomy = 'category';

2. 验证需要迁移的文章列表

先确认哪些文章符合迁移条件(属于Uncategorized、2010年发布、已发布状态):

SELECT p.ID, p.post_title
FROM wp_posts p
JOIN wp_term_relationships tr ON p.ID = tr.object_id
JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE p.post_status = 'publish'
  AND p.post_type = 'post'
  AND tt.taxonomy = 'category'
  AND tt.term_id = 1 -- 默认Uncategorized的term_id是1,若你的站点不同请自行替换
  AND YEAR(p.post_date) = 2010;

3. 移除文章与Uncategorized的关联

DELETE tr 
FROM wp_term_relationships tr
JOIN wp_posts p ON tr.object_id = p.ID
JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE p.post_status = 'publish'
  AND p.post_type = 'post'
  AND tt.taxonomy = 'category'
  AND tt.term_id = 1
  AND YEAR(p.post_date) = 2010;

4. 将文章添加到目标年份分类

把下面的$TARGET_TAX_ID替换成步骤1中拿到的实际值(比如3):

INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
SELECT p.ID, $TARGET_TAX_ID, 0
FROM wp_posts p
JOIN wp_term_relationships tr_old ON p.ID = tr_old.object_id
JOIN wp_term_taxonomy tt_old ON tr_old.term_taxonomy_id = tt_old.term_taxonomy_id
WHERE p.post_status = 'publish'
  AND p.post_type = 'post'
  AND tt_old.taxonomy = 'category'
  AND tt_old.term_id = 1
  AND YEAR(p.post_date) = 2010;

批量处理多个年份的技巧

如果要处理2011、2012等其他年份,只需要:

  1. 为每个年份创建对应的分类,拿到各自的term_taxonomy_id
  2. 把上述SQL中的YEAR(p.post_date) = 2010替换成对应年份,同时替换$TARGET_TAX_ID为对应分类的ID即可

注意事项

  • 替换SQL中的wp_前缀:如果你的WordPress数据库用了自定义前缀(比如mywp_),所有表名要同步修改
  • 先在测试环境验证:不要直接在生产环境执行SQL,避免数据丢失
  • 操作后刷新缓存:进入WordPress后台→设置→固定链接,点击“保存更改”,确保分类关联生效

内容的提问来源于stack exchange,提问作者Stephen Peters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:52:19