我们有10个类别,比如A,B,C,D等
我们有1个标签,比如tag
函数get_categories
将获取其中包含帖子的所有类别(默认情况下),但我们需要的是相同的功能,只需要获取包含具有特定标记的帖子的类别。
因此,类别A
有5个标记为tag
的帖子,类别B
没有,类别C
有3.然后我想看A
和此列表中C
。
是否可以按标记过滤get_categories
?
尝试
$terms = get_terms( array(
'taxonomy' => 'category',
'hide_empty' => true,
'meta_query' => array(
array(
'key' => 'tag',
'value' => 'my-tag-slug',
'compare' => '=',
),
),
) );
还尝试使用标签ID。这是我正在使用的标准帖子类别和标签。
答案 0 :(得分:1)
请改用get_terms()并使用您可以使用的meta_query参数:https://developer.wordpress.org/reference/functions/get_terms/
类似的东西:
$terms = get_terms( array(
'taxonomy' => 'category',
'hide_empty' => true,
'meta_query' => array(
array(
'key' => 'tag',
'value' => 'tag',
'compare' => '=',
),
),
) );
根据您使用的WordPress版本,这会有所不同 - 请查看文档。
关于参数的'meta_query'部分,请查看https://codex.wordpress.org/Class_Reference/WP_Query以获取更多信息。
<强>更新强>
尝试这样的事情(注意将{tag-slug}更改为所需的标签slug
// Get the categories
$terms = get_terms( array(
'taxonomy' => 'category',
) );
// Loop through them
foreach($terms as $term) {
// Get the posts in that category with the required tag
$args = array(
'category_name' => $term->name,
'tax_query' => array(
array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => '{tag-slug}'
)
)
);
$posts_array = get_posts( $args );
foreach ($posts_array as $value) {
// save what you need here - maybe an array for each category with the posts so you can run a count on them?
}
}