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

时间:2017-07-14 12:57:51

标签: php mysql sql wordpress

我正在接受遗留工具的工作,并正在重做一个适用于自定义帖子类型的页面。新帖子类型我们会调用 new_resource ,并且具有相同的"类别"标识符作为现有遗留资源类型 old_resource 。我对Wordpress很陌生,所以可能有一种更好的方法,而不仅仅是从头开始,但这就是我所处的位置。我的目标是使用与现有资源相同的数据,因此我不必创建所有新帖子。

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

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

update wp_posts set guid = replace(guid, 'old-resource', 'new-resource');

所有这一切都在发挥作用。

我现在要做的是更新自定义分类(我没有使用内置的默认类别)。我们将此示例称为 resource-category 。现有的旧资源帖子都分配了资源类别,当我查询wp_terms时,我可以看到所有类别。我已经在新资源类型中设置了这些SAME类别。是否有一个我可以运行的查询,它将选择具有一种新资源的所有资源(现在,在我运行上面的更新查询后,所有这些资源都已存在)并设置其类别?比如更新他们的term_id,其中term_id仍然指向旧类别类型的ID?

Wordpress版本:4.2.2 PHP版本:5.3.3

编辑:

我运行了这个查询:

mysql> select term_id, name, slug from wp_terms where slug = 'videos';

+---------+--------+--------+
| term_id | name   | slug   |
+---------+--------+--------+
|      69 | Videos | videos |
|     177 | Videos | videos |
+---------+--------+--------+
2 rows in set (0.00 sec)

term_id 69属于旧资源类型。 term_id 177属于新资源。我希望我当前所有的资源(我已经运行更新资源类型查询的资源)指向term_id 177而不是69,但我不确定帖子和术语之间的关系。

更新所有新资源的term_id,设置为69到177。

2 个答案:

答案 0 :(得分:0)

更新只设置了set子句中的列..而且我设置子句ypu可以有多个列

您可以使用仅更新

进行两次更新
 update wp_posts 
         set post_type = 'new_resource', 
         guid = replace(guid, 'old-resource', 'new-resource')
 where post_type = 'old_resource';

答案 1 :(得分:0)

我明白了。我运行了一个查询,选择了我正在比较的所有信息:

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_term_relationship表中更新了现有的taxonomy_ids。

UPDATE wp_term_relationships SET term_taxonomy_id = 176 WHERE term_taxonomy_id = 13;

13是旧资源视频类型的ID,175是新资源视频类型的ID。

刚刚通过Wordpress表关系进行了一些挖掘。