我向WordPress导入了一个博客,它有超过300个帖子。我注意到它没有将类别放到WordPress帖子中,但它确实导入了所有类别名称。幸运的是,类别名称在帖子名称中(例如,'Science - Earth Is Round'将是帖子标题,'Science'将是类别)。由于所有类别都存在,有没有什么方法可以运行一个脚本来查看帖子标题,看看是否有任何类别匹配标题中的文本,如果是这样,那么设置为类别?
答案 0 :(得分:0)
编辑2
这是一个修改后的选择查询,根据术语是否在标题中匹配术语:
select p.id, tt.term_taxonomy_id, t.term_id, t.name, p.post_title
from wp_terms t
join wp_posts p on INSTR(p.post_title, t.name)
join wp_term_taxonomy tt on tt.term_id = t.term_id
where p.post_type = 'post'
这是您要使用的插入查询(请注意,如果由于主键约束而插入重复的object_id和term_taxonomy_id对,则此查询将引发错误):
insert into wp_term_relationships (object_id, term_taxonomy_id, term_order)
select p.id, tt.term_taxonomy_id, 0
from wp_terms t
join wp_posts p on INSTR(p.post_title, t.name)
join wp_term_taxonomy tt on tt.term_id = t.term_id
where p.post_type = 'post'
如果确实收到了主键约束错误,则可以使用insert ignore
insert ignore into wp_term_relationships (object_id, term_taxonomy_id, term_order)
select p.id, tt.term_taxonomy_id, 0
from wp_terms t
join wp_posts p on INSTR(p.post_title, t.name)
join wp_term_taxonomy tt on tt.term_id = t.term_id
where p.post_type = 'post'
编辑1:
这是一个可能适合您的查询:
insert into wp_term_relationships (object_id, term_taxonomy_id, term_order)
select p.id, tt.term_taxonomy_id, 0
from wp_posts p
join wp_terms t on t.name = substring_index(p.post_title, ' ', 1)
join wp_term_taxonomy tt on tt.term_id = t.term_id
where p.post_type = 'post'
这里我假设标题就像你的例子。您可能需要调整分隔符。
此外,我会自行运行选择查询来测试您要获取的数据,并确保您没有获得重复项和内容。肯定是先备份你的数据库。
select p.id, tt.term_taxonomy_id, 0
from wp_posts p
join wp_terms t on t.name = substring_index(p.post_title, ' ', 1)
join wp_term_taxonomy tt on tt.term_id = t.term_id
where p.post_type = 'post'
此处还有一个更好的调试结果选择查询:
select p.id, tt.term_taxonomy_id, t.term_id, substring_index(p.post_title, ' ', 1)
from wp_posts p
join wp_terms t on t.name = substring_index(p.post_title, ' ', 1)
join wp_term_taxonomy tt on tt.term_id = t.term_id
where p.post_type = 'post'