获取与自定义帖子类型相关的字词

时间:2013-01-28 14:44:45

标签: wordpress taxonomy custom-post-type term

我正在根据每个美国州的信息类别建立一个网站。我为每个州创建了一个名为state_data的分类法和一个自定义帖子类型。州邮政类型共享分类,但并非所有州都会获得所有条款。我正在寻找一种方法来列出仅与特定状态相关的所有术语。本机wp函数get_terms获取分类法的所有术语。有没有办法通过post_type过滤get_terms?

2 个答案:

答案 0 :(得分:2)

好吧,你。如果每个post_type中没有那么多实体代表状态。说10是好的。您可以循环使用一个post_type中的所有实体,并使用wp_get_post_terms结果循环来记录所有术语ID并将其放入数组中。

我在SQL方面并不像我想的那样经验丰富,但在查看数据库时,可以通过自定义SQL查询来访问它。

看,特定自定义帖子类型的每个实体都有唯一的ID。你可以

SELECT ID FROM wp_posts WHERE post_type = 'Alabama';

现在您拥有阿拉巴马州的所有实体ID。现在,您可以选择分配给这些实体的所有术语。

SELECT term_taxonomy_id FROM wp_term_relationship WHERE object_id IN ( *RESULT FROM PREVIOUS QUERY* );

所以现在你有了所有Alabama实体的term_taxonomy_ids,你可以从wp_term_taxonomy表中获取它们

SELECT term_id from wp_term_taxonomy WHERE term_taxonomy_id in ( *RESULT FROM PREVIOUS QUERY* );

最后,您可以从wp_terms获取所有术语或通过PHP函数查询它们。就像我说的。我不是SQL专家,所以我不能通过一个SQL查询来解决这个问题,但是我不会因为PHP的一点帮助而把它全部放在一起。但重要的是效率,我猜......

答案 1 :(得分:1)

你可能想尝试这样的事情:

SELECT p.ID, p.post_title, tr.term_taxonomy_id, t.`name` 
FROM wp_term_relationships as tr 
JOIN wp_posts AS p ON p.ID = tr.`object_Id`
JOIN wp_terms AS t ON t.`term_id` = tr.`term_taxonomy_id`
WHERE p.post_type = 'state_data'
AND t.`name` = 'Alabama'
ORDER BY p.ID;

您可以从SELECT查询中选择您想要的内容...只需ID或您希望的任何字段。

基本上,查询正在做的是通过terms_relationship表将术语表链接到posts表。