使用 SQL 更改多个帖子的 WordPress 帖子类别

问题描述 投票:0回答:1

我有一个 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_posts 中的 id 字段是 wp_term_relationships 中的 object_id 字段
  • wp_term_relationships 中的 object_id 字段为我们提供了 term_taxonomy_id 字段
  • term_taxonomy_id 是 'wp_terms' 中的 term_id
  • “wp_terms”是存储实际类别名称的位置。

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 的任何提示吗? (我是不是想多了?)

我可以用鼠标浏览数百个帖子并手动设置它,但这似乎是愚蠢的方法。

sql wordpress categories posts
1个回答
0
投票
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
  • 您需要对每年运行类似的查询,将“2010”和
    {term_id}
    替换为相应的年份和 term_id。

如果可能,请在对实时数据执行之前对示例数据集或暂存环境进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.