使用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等其他年份,只需要:
- 为每个年份创建对应的分类,拿到各自的
term_taxonomy_id - 把上述SQL中的
YEAR(p.post_date) = 2010替换成对应年份,同时替换$TARGET_TAX_ID为对应分类的ID即可
注意事项
- 替换SQL中的
wp_前缀:如果你的WordPress数据库用了自定义前缀(比如mywp_),所有表名要同步修改 - 先在测试环境验证:不要直接在生产环境执行SQL,避免数据丢失
- 操作后刷新缓存:进入WordPress后台→设置→固定链接,点击“保存更改”,确保分类关联生效
内容的提问来源于stack exchange,提问作者Stephen Peters
相关产品推荐
相关产品推荐

