【问题标题】:How do I get all taxonomies a post is related to - Wordpress如何获取与帖子相关的所有分类法 - Wordpress
【发布时间】:2015-05-02 21:14:53
【问题描述】:

感谢您抽出宝贵时间查看此问题,希望您能提供帮助!

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

例如;假设我在我的 Wordpress 网站中有一个产品类别/分类法和一个子产品类别/分类法。当我登陆产品类别/分类页面时,我想查看所有相关子类别/分类的列表。

我希望这是有道理的,因为在花费了数小时谷歌搜索之后,我只能找到一些问题,询问如何获取与分类相关的所有帖子 - 而不是相反!

非常感谢!

帕特里克

【问题讨论】:

  • 子产品类别是产品类别的子类别吗?
  • 您好 Bobdye,感谢您花时间查看我的问题。所以在这个例子中,我有一个可以过滤的产品列表;制造商、条件、类型(例如;拖拉机、割草机等)和子类型(例如;少年、成人、配件等)。我需要做的是当用户按制造商过滤网站时,然后显示该制造商的相关类型和子类型。我希望这是有道理的!抱歉,评论太长了。
  • 我大致了解您要完成的工作。我试图找出“子类型”是否只是术语,或者它是否表示关系。从您的示例中听起来,子类型实际上只是用于选择产品的另一个类别/分类,而不是任何其他标准的“子”。
  • “子类型”或任何其他类别/分类法与父/子无关,不。你对我的例子的理解是正确的。

标签: php wordpress custom-taxonomy


【解决方案1】:

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

假设您有一组产品 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_id 的基表。

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

您现在可以使用它为访问者创建一种方式来选择更多子集,例如通过为每个分类创建一个术语下拉列表。

【讨论】:

  • 您好 bobdye,感谢您抽出宝贵时间提交上述答案。不幸的是,我只是有机会尝试代码,因此很抱歉延迟回复您!通过运行您提供的代码,我得到的只是一个空白数组。你能进一步调查为什么会这样吗?非常感谢您的帮助! :-)
  • 我很抱歉 bobdye,直接在 phpMyAdmin 中运行了查询,它通知我您的查询中有错误 - 'wp_term' 应该是 'wp_terms',虽然很容易犯错误,但它现在似乎正在工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2011-10-04
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多