有没有办法从帖子标题中获取WordPress类别名称?

时间:2014-02-04 07:19:54

标签: wordpress wordpress-theming

我向WordPress导入了一个博客,它有超过300个帖子。我注意到它没有将类别放到WordPress帖子中,但它确实导入了所有类别名称。幸运的是,类别名称在帖子名称中(例如,'Science - Earth Is Round'将是帖子标题,'Science'将是类别)。由于所有类别都存在,有没有什么方法可以运行一个脚本来查看帖子标题,看看是否有任何类别匹配标题中的文本,如果是这样,那么设置为类别?

1 个答案:

答案 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'