首先,您会说“我正在使用get\\u terms从Tax 1中检索所有与之相关联的帖子中的术语”,但是您的实际代码会获取该分类法中的所有术语,无论它们是否有帖子。您需要设置hide_empty
到true
.
这样一来,坏消息就是:你不能用get_terms()
. 如果不查询帖子和比较术语,这种类型的信息是不存在的。因此,不幸的是,您想要避免的混乱解决方案是必要的。
最终,我认为在这种情况下,只使用SQL可能会更好。此代码将使用$wpdb
要从分类法A中获取术语,其中包含任何给定帖子类型的帖子,这些帖子在分类法B中具有特定术语,请执行以下操作:
$post_type = \'post\';
$taxonomy_a = \'post_tag\';
$taxonomy_b = \'category\';
$term_b_id = 12;
$query = $wpdb->prepare(
"SELECT DISTINCT
terms.*
FROM
`wp_terms` terms
INNER JOIN
`wp_term_taxonomy` tt1 ON
tt1.term_id = terms.term_id
INNER JOIN
`wp_term_relationships` tr1 ON
tr1.term_taxonomy_id = tt1.term_taxonomy_id
INNER JOIN
`wp_posts` p ON
p.ID = tr1.object_id
INNER JOIN
`wp_term_relationships` tr2 ON
tr2.object_ID = p.ID
INNER JOIN
`wp_term_taxonomy` tt2 ON
tt2.term_taxonomy_id = tr2.term_taxonomy_id
WHERE
p.post_type = %s AND
p.post_status = \'publish\' AND
tt1.taxonomy = %s AND
tt2.taxonomy = %s AND
tt2.term_id = %d",
[
$post_type,
$taxonomy_a,
$taxonomy_b,
$term_b_id,
]
);
$results = $wpdb->get_results( $query );
if ( $results ) {
$terms = array_map( \'get_term\', $results );
}
因此,该代码获取所有标签,这些标签具有分配给ID为12的类别的帖子。
最后一点get_term()
确保最终数组包含相同的WP_Term
通过运行可以获得的对象get_terms()
.