0

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

4

2 回答 2

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* );

因此,现在您已经获得了与所有阿拉巴马州实体相关的 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 的一点帮助将它们组合在一起。但重要的是效率,我想...

于 2013-01-28T16:05:43.707 回答
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 表将 terms 表链接到 posts 表。

于 2017-11-30T23:43:05.307 回答