Php 如何更新现有自定义帖子类型的类别?

Php 如何更新现有自定义帖子类型的类别?,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我拿起一个遗留工具的工作,并正在重做一个与自定义文章类型工作的页面。我们将称之为新资源的新帖子类型,其“类别”标识符与现有的旧资源类型相同。我是Wordpress的新手,所以可能有比从头开始更好的方法,但这就是我所处的位置。我的目标是使用与现有资源相同的数据,这样我就不必创建所有的新帖子 我运行了两个查询,将现有资源类型更新为新资源类型: update wp_posts set post_type = 'new_resource' where post_type = 'old_resource'

我拿起一个遗留工具的工作,并正在重做一个与自定义文章类型工作的页面。我们将称之为新资源的新帖子类型,其“类别”标识符与现有的旧资源类型相同。我是Wordpress的新手,所以可能有比从头开始更好的方法,但这就是我所处的位置。我的目标是使用与现有资源相同的数据,这样我就不必创建所有的新帖子

我运行了两个查询,将现有资源类型更新为新资源类型:

update wp_posts set post_type = 'new_resource' where post_type = 'old_resource';

所有这些都在起作用

我现在要做的是更新自定义分类法(我没有使用内置的默认类别)。例如,我们将其称为资源类别。现有的旧资源帖子都分配了它们的资源类别,当我查询wp_术语时,我可以看到所有类别。我在新的资源类型中设置了相同的类别。我是否可以运行一个查询来选择具有一种新资源类型的所有资源(在我运行上面的更新查询之后,所有资源现在都是),并设置它们的类别?比如更新他们的term_id,其中term_id仍然指向旧类别类型的id

Wordpress版本:4.2.2 PHP版本:5.3.3

编辑: 我运行了以下查询:

mysql>从wp\u terms中选择term\u id、name、slug,其中slug='videos'

+---------+--------+--------+
| term_id | name   | slug   |
+---------+--------+--------+
|      69 | Videos | videos |
|     177 | Videos | videos |
+---------+--------+--------+
2 rows in set (0.00 sec)
术语_id 69属于旧的资源类型。术语_id 177属于新资源。我希望我所有的当前资源(那些我已经运行过更新资源类型查询的资源)都指向term_id 177而不是69,但是我不确定帖子和术语之间的关系


类似于更新所有新资源的term_id,将69设置为177。

更新只设置set子句中的列。。我设置子句ypu可以有多个列

您可以仅使用一个更新来执行这两个更新

 update wp_posts 
         set post_type = 'new_resource', 
         guid = replace(guid, 'old-resource', 'new-resource')
 where post_type = 'old_resource';

更新只设置set子句中的列。。我设置子句ypu可以有多个列

您可以仅使用一个更新来执行这两个更新

 update wp_posts 
         set post_type = 'new_resource', 
         guid = replace(guid, 'old-resource', 'new-resource')
 where post_type = 'old_resource';

我想出来了。我运行了一个查询,选择了我要比较的所有信息:

SELECT p.post_title as “wp_post_title”, tr.term_taxonomy_id as “term_rship_id”, tt.taxonomy as “term_tax_name”, tm.slug as “terms_slug”
FROM wp_posts p
INNER JOIN wp_term_relationships tr ON p.ID = tr.object_id
INNER JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms tm ON tm.term_id = tt.term_id
WHERE tt.taxonomy = 'exp_wp_resource_category' or tt.taxonomy = 'resource-categories';
然后,我更新了wp\u term\u关系表中现有的分类法\u id

UPDATE wp_term_relationships SET term_taxonomy_id = 176 WHERE term_taxonomy_id = 13;
13是旧资源视频类型的ID,175是新资源视频类型的ID


只是在Wordpress表的关系中进行了一些挖掘。

我找到了答案。我运行了一个查询,选择了我要比较的所有信息:

SELECT p.post_title as “wp_post_title”, tr.term_taxonomy_id as “term_rship_id”, tt.taxonomy as “term_tax_name”, tm.slug as “terms_slug”
FROM wp_posts p
INNER JOIN wp_term_relationships tr ON p.ID = tr.object_id
INNER JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
INNER JOIN wp_terms tm ON tm.term_id = tt.term_id
WHERE tt.taxonomy = 'exp_wp_resource_category' or tt.taxonomy = 'resource-categories';
然后,我更新了wp\u term\u关系表中现有的分类法\u id

UPDATE wp_term_relationships SET term_taxonomy_id = 176 WHERE term_taxonomy_id = 13;
13是旧资源视频类型的ID,175是新资源视频类型的ID


只是在Wordpress表格关系中进行了一些挖掘。

你的问题不清楚。。尝试发布一个合适的数据样本,得到预期的结果。@scaisEdge这是不是更容易混淆?你的问题不清楚。。尝试发布一个合适的数据样本,得到预期的结果。@scaisEdge这是否会减少混淆?但这如何解决类别问题?或者这只是对我之前的查询的一个评论?你对分类有什么问题。。您可以指定您喜欢的值,例如:只需将category_id=4添加到您设置的子句中,我就知道您在说什么了。我可以将每篇文章的term_id设置为更新后的term_id(我在上面添加了一些视频类型的查询代码)。我想我只是对wp_terms表和wp_post之间的关系感到困惑。我假设wp_posts表中有一个来自wp_terms表的外键,但不确定它是什么。我不明白。。试着用所有涉及的表格展示一个真实的样品,并展示预期的结果。所以你没有具体回答我,但你的问题让我明白了,所以我会接受。我不明白Wordpress表是如何通过键链接在一起的,所以写下这些查询很有帮助。但这如何解决类别问题呢?或者这只是对我之前的查询的一个评论?你对分类有什么问题。。您可以指定您喜欢的值,例如:只需将category_id=4添加到您设置的子句中,我就知道您在说什么了。我可以将每篇文章的term_id设置为更新后的term_id(我在上面添加了一些视频类型的查询代码)。我想我只是对wp_terms表和wp_post之间的关系感到困惑。我假设wp_posts表中有一个来自wp_terms表的外键,但不确定它是什么。我不明白。。试着用所有涉及的表格展示一个真实的样品,并展示预期的结果。所以你没有具体回答我,但你的问题让我明白了,所以我会接受。我对Wordpress表是如何通过键链接在一起感到困惑,所以写下这些查询会有所帮助。