我想得到一些选定职位的所有类别
例如,我有post id,如1、2、3。帖子1、2、3分别有{猫、狗}、{狗、老鼠}、{老鼠}等类别。我想要一个类别列表,其中包括{猫,狗,老鼠}。
我已经研究了两个WP函数,
get_terms:
不允许我提供post IDwp_get_post_terms:
这只返回单个帖子的条款
我找到了两种实现相同目标的方法:
1. Loop
首先获取帖子ID,然后使用循环获取每个帖子的类别。当有太多的帖子时,这是太多的查询。
2. Custom query
下面的查询还提供了所需的结果。但运行自定义查询并不是WP的风格。我真的想避免这种解决方案。
select * from sh_7_terms
where term_id in (
select distinct(sh_7_terms.term_id)
from sh_7_terms, sh_7_term_taxonomy, sh_7_term_relationships, sh_7_posts
where
sh_7_terms.term_id = sh_7_term_taxonomy.term_id AND
sh_7_term_taxonomy.term_taxonomy_id = sh_7_term_relationships.term_taxonomy_id AND
sh_7_term_relationships.object_id = sh_7_posts.ID AND
sh_7_term_taxonomy.taxonomy = \'product_cat\' and
sh_7_posts.ID IN ( 1, 2, 3 )
)
Question:是否还有其他优化的解决方案?
最合适的回答,由SO网友:TheDeadMedic 整理而成
进来wp_get_object_terms
- 它接受一个对象ID数组,并检索其所有(唯一)附加的术语:
$terms = wp_get_object_terms( [ 1, 2, 3 ], \'category\' );
foreach ( $terms as $term )
echo "$term->name<br />";