我有一个 WordPress 网站,其中有数百篇帖子的类别为“未分类”。我需要做的就是获取这些“未分类”的帖子,并按它们创建的年份将它们分配到一个类别。也就是说,如果帖子是在 2010 年创建的,则应将其分配到类别“2010”。
这有点超出了我的 SQL 经验。此代码将返回 2010 年所有帖子的列表。
select p.id, p.post_title from wp_posts p
inner join wp_term_relationships tr on tr.object_id = p.ID
inner join wp_terms t on tr.term_taxonomy_id = t.term_id
inner join wp_term_taxonomy tt on tt.term_taxonomy_id = t.term_id
where post_status ='publish'
and tt.taxonomy = 'category'AND
p.post_date like '2010%'
我在工作中一直在思考如何设置帖子类别。我所看到的是:
wp_terms 表非常简单:
[term_id] [name] [slug] [term_group]
[3] [2010] [2010] [0]
我应该怎样做呢?看来,如果我知道 2010 年帖子的 term_id 应该是“3”,并且如果我知道哪个 object_id 是 2010 年帖子,那么我要做的就是进入 wp_term_relationships 表,并为这些 object_id 设置 term_taxonomy_id = '3' .
对吗?如果是这样...关于为此编写 SQL 的任何提示吗? (我是不是想多了?)
我可以用鼠标浏览数百个帖子并手动设置它,但这似乎是愚蠢的方法。
UPDATE wp_term_relationships
SET term_taxonomy_id = (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = {term_id})
WHERE object_id IN (
SELECT p.ID FROM wp_posts p
WHERE p.post_date LIKE '2010%' AND p.post_status = 'publish'
)
AND term_taxonomy_id = (
SELECT term_taxonomy_id FROM wp_term_taxonomy
WHERE term_id = (SELECT term_id FROM wp_terms WHERE name = 'Uncategorized')
);
假设与注释:
{term_id}
替换为每年适当的 term_id。Uncategorized
。{term_id}
替换为相应的年份和 term_id。如果可能,请在对实时数据执行之前对示例数据集或暂存环境进行测试。