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

有没有办法从文章标题中获取WordPress类别名称?,wordpress,wordpress-theming,Wordpress,Wordpress Theming,我把一个博客导入WordPress,它有300多篇文章。我注意到它没有将类别放到WordPress帖子中,但它确实导入了所有类别名称。幸运的是,类别名称在帖子名称中(例如,“科学-地球是圆的”将是帖子标题,“科学”将是类别)。既然所有类别都存在,我有没有办法运行一个脚本,查看帖子标题中是否有任何类别与标题中的文本相匹配,如果有,将其设置为类别?编辑2 下面是一个修改后的select查询,它根据术语是否在标题中匹配术语与文章: select p.id, tt.term_taxonomy_id, t

我把一个博客导入WordPress,它有300多篇文章。我注意到它没有将类别放到WordPress帖子中,但它确实导入了所有类别名称。幸运的是,类别名称在帖子名称中(例如,“科学-地球是圆的”将是帖子标题,“科学”将是类别)。既然所有类别都存在,我有没有办法运行一个脚本,查看帖子标题中是否有任何类别与标题中的文本相匹配,如果有,将其设置为类别?

编辑2

下面是一个修改后的select查询,它根据术语是否在标题中匹配术语与文章:

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'
以下是您将使用的插入查询(请注意,如果由于主键约束而插入重复的对象\u id和术语\u分类法\u id对,则此查询将引发错误):

如果确实出现主键约束错误,可以使用
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查询来测试您要返回的数据,并确保您没有得到重复的数据。是的,一定要先备份你的数据库

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查询:

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'

那绝对有可能。但是我不能把代码写下来。您也可以编写一个MySQL插入查询来实现这一点。会有点棘手,但也有可能。对于mysql查询,您需要执行一个“insert-into-select”操作,这将非常有效。我甚至没有想过使用mysql查询。现在正在研究:如果我的标题像“晚餐吃中餐”,并且存在“中餐”类别,mysql查询会将其设置为类别吗?或者它会寻找一个名为“eat”的类别?是的,按照我的设置方式,应该是eat。你能提供一些分类位置的例子吗?也许我可以提供一个查询你有多少类别。如果你没有数百个类别,可能会有更多的硬编码。是的,基本上每个标题都是“为你的商店观看{Quick And Easy}教程”,括号中的单词就是类别,不管有多少单词,如果有意义的话。每篇文章都以单词watch开头。我有大约50个类别。我明白你的意思。我还有一个疑问。给我几分钟写下来。但基本上你可以根据你的类别对标题进行“短语匹配”。
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'