我有三个标签:
- 标记1
- 标签2 标记
- 3
我需要显示我的custom post type
和指定术语中的所有帖子。他们需要be sorted by tag
并隐藏不被使用的标签,像这样:
-
标记1
- Post A
- Post C
- Post A
-
标签2
- Post B
- Post B
但是它是这样显示的:
-
标记1
- Post A
- Post C
- Post A
-
标签2
- Post B
标记 - Post B
3
- (空的)
标签3正在显示,即使目前没有帖子使用标签…
下面是我使用的代码:// These 3 variables change dynamically depending on page slug.
$cpt = houses;
$tax = type;
$term = small;
$args = array(
'posts_per_page' => -1,
'orderby' => 'name',
'order' => 'ASC',
'post_type' => $cpt,
'tax_query' => array(
array(
'taxonomy' => $tax,
'field' => 'name',
'terms' => $term
)
)
);
$tags = get_tags($args); // Tag 1, Tag 2, Tag 3
$posts = get_posts($args);
foreach($tags as $tag)
{
?>
<h5><?php echo $tag->name.' (Tag)'; ?></h5>
<?php
foreach($posts as $post)
{
if( has_tag( $tag ) )
{
?>
<a href="<?php echo the_permalink();?>"><?php echo the_title().' (Post)';?></a><br>
<?php
}
}
?>
<hr>
<?php
}
?>
我很感激你的帮助!你的代码逻辑应该是这样的:
- get_tag每个标签的
- 获取相关帖子(在这里运行
get_posts
) - 只有在有职位的情况下
- 返回标签的标题
- 为每个相关的帖子(在这里为帖子运行foreach循环)
- echo post的标题
- 获取相关帖子(在这里运行
因此,您可以将get_posts
查询移动到foreach($tags as $tag)
中,并使用$tag
参数来查看是否有与该标记相关的任何帖子。
请注意,在$posts_args
中,我使用了一个名为tag
的额外参数,它将在tags foreach loop
中为您完成此操作。tag
参数的值是标记段符。
Tag arguments you could pass into your query
Docs
同样通过使用get_tags
函数,您不必指定orderby
或order
,因为'orderby'的默认值是'name', 'order'的默认值是'ASC',所以您不需要将它们作为参数传递。
所以整个代码应该是这样的:
$cpt = houses;
$tax = type;
$term = small;
$posts_args = array(
'posts_per_page' => -1,
'orderby' => 'name',
'order' => 'ASC',
'post_type' => $cpt,
'tag' => $tag->slug,
//OR
//'tag_slug__in' => array($tag->slug),
'tax_query' => array(
array(
'taxonomy' => $tax,
'field' => 'name',
'terms' => $term
)
)
);
$tags = get_tags(); // Tag 1, Tag 2, Tag 3
foreach ($tags as $tag) {
$posts = get_posts($posts_args);
if ($posts) { ?>
<h5><?php echo $tag->name . ' (Tag)'; ?></h5>
<?php
foreach ($posts as $post) { ?>
<a href="<?php echo the_permalink(); ?>"><?php echo the_title() . ' (Post)'; ?></a><br>
<?php
}
?>
<hr>
<?php
}
}
?>
输出如下:
Tag 1
Post A
Post C
--------
Tag 2
Post B
如果你能让它工作,请告诉我!