感谢您花时间看看这个问题,希望您能提供帮助!
我正在寻找运行wordpress查询,该查询检索与另一个相关的所有分类。
例如;说我的Wordpress网站上有产品的类别/分类和子产品的类别/分类。当我登陆产品类别/分类法页面时,我希望看到所有相关子类别/分类法的列表。
我希望这是有道理的,因为经过谷歌搜索花了好几个小时后,所有我能找到的问题都是如何获得与分类相关的所有帖子 - 而不是反过来!
非常感谢提前!
帕特里克答案 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 |
+-----------+-------+
...
现在,您可以使用此功能为访问者创建一种选择其他子集的方法,例如通过为每个分类法创建一个术语下拉列表。