如何获得帖子与Wordpress相关的所有分类法

时间:2015-03-02 13:36:41

标签: php wordpress custom-taxonomy

感谢您花时间看看这个问题,希望您能提供帮助!

我正在寻找运行wordpress查询,该查询检索与另一个相关的所有分类。

例如;说我的Wordpress网站上有产品的类别/分类和子产品的类别/分类。当我登陆产品类别/分类法页面时,我希望看到所有相关子类别/分类法的列表。

我希望这是有道理的,因为经过谷歌搜索花了好几个小时后,所有我能找到的问题都是如何获得与分类相关的所有帖子 - 而不是反过来!

非常感谢提前!

帕特里克

1 个答案:

答案 0 :(得分:0)

如果我理解了这个问题,您希望获得适用于特定网页上列出的产品的分类和条款,例如:类别或分类页面。

假设您有一个产品ID数组$ product_id,例如当前显示的产品ID。您应该能够获得适用于这些产品的分类法和术语,如下所示:

global $wpdb;

$ids = implode(',', $product_id);
$query = "SELECT x.taxonomy, t.name FROM wp_term_taxonomy AS x
          JOIN wp_term AS t on t.term_id = x.term_id
          JOIN wp_terms_relationships AS r on r.term_taxonomy_id = x.term_taxonomy_id
          WHERE r.object_id IN ($ids)
          GROUP BY x.taxonomy, t.name";
$taxonomies = $wpdb->get_results( $query );

在上面:

SELECT x.taxonomy, t.name FROM wp_term_taxonomy AS x

是分类法(名称)的基表和术语的term_ids。

JOIN wp_terms AS t on t.term_id = x.term_id

将wp_term_taxonomy中的每个term_ids与其术语名称相匹配。

JOIN wp_term_relationships AS r on r.term_taxonomy_id = x.term_taxonomy_id

然后将其与wp_term_relationships中的条目进行匹配,这些条目显示哪些产品(自定义帖子ID)使用这些条款。

WHERE r.object_id IN ($ids)

将列表限制为仅与列表中的产品相关的条款。

因为在这个例子中,我们要求x.taxonomy和t.name,

GROUP BY x.taxonomy, t.name

确保您没有重复项。如果需要,可以通过更改SELECT获得其他字段。

因此,一旦运行get_results(),就应该有一个对象数组,每个对象都有一个分类名称和术语名称。一般方案将是:

+-----------+-------+
| taxonomy1 | term1 |
+-----------+-------+
| taxonomy1 | term2 |
+-----------+-------+
| taxonomy1 | term1 |
+-----------+-------+
| taxonomy2 | term1 |
+-----------+-------+
| taxonomy3 | term1 |
+-----------+-------+
...

现在,您可以使用此功能为访问者创建一种选择其他子集的方法,例如通过为每个分类法创建一个术语下拉列表。