2015-03-02 23 views
1

感谢您花时间看看这个问题,希望您能帮到您!如何获得一篇文章涉及到的所有分类法 - Wordpress

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

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

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

非常感谢提前!

帕特里克

+0

是子产品类别产品类别的儿童? – bobdye 2015-03-02 17:28:33

+1

我通常理解你想要完成的事情。我试图找出的是,“子类型”只是术语,还是它表示了一种关系。这听起来像你的例子中的子类型实际上只是选择产品的另一个类别/分类,而不是任何其他标准的“孩子”。 – bobdye 2015-03-03 16:29:41

回答

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_id及其术语名称。

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 | 
+-----------+-------+ 
... 

您现在可以使用它来创建一个方法,供游人选择进一步的子集,例如通过创建每个分类的术语下拉菜单。

+0

嗨bobdye,感谢您花时间提交上述答案。不幸的是,我只是有机会尝试代码,所以迟迟不能回复你!通过运行您提供的代码,我得到的所有数据都是空白数组。你能否进一步调查为什么会这样?提前感谢您的帮助! :-) – 2015-03-09 11:43:32

+0

我的歉意bobdye,直接在phpMyAdmin中运行查询,它通知我在查询中有错误 - 'wp_term'应该是'wp_terms',虽然容易犯错误,但它现在似乎正在工作! – 2015-03-09 11:50:54

相关问题