在WordPress的循环中显示每个帖子的类别名称

我正在修改一个预先构建的主题, 以在index.php主页上所有帖子的主网格之前显示3个” 精选帖子” 。我认为最好的方法是在查询具有” 功能” 类别的帖子的主循环之前执行另一个循环。我需要它在帖子缩略图的背景图像前面显示帖子的标题以及帖子类别。
但是, 当我使用the_category(); 时, 背景图片将不再可点击, 并且锚标记似乎在循环中的每个元素周围重复并关闭。我的代码如下:

< ?php$query = array( 'posts_per_page' => 3, 'post_type'=> 'post', 'category_name'=> 'featured', 'orderby'=> 'date', 'order'=> 'DESC' ); $featured_home = new WP_Query( $query ); if( $featured_home-> have_posts() ) {?> < div class="container featured-home"> < ?php while ( $featured_home-> have_posts() ) : $featured_home-> the_post(); ?> < div class="featured-home-box"> < a href="http://www.srcmini.com/< ?php the_permalink(); ?>"> < div class="featured-home-img" < ?php if ( $thumbnail_id = get_post_thumbnail_id() ) { if ( $image_src = http://www.srcmini.com/wp_get_attachment_image_src( $thumbnail_id,'normal-bg' ) ) printf( ' style="background-image: url(%s); "', $image_src[0] ); }?> > < div class="blog-info-content"> < span class="cat"> < ?php the_category(); ?> < /span> < h3> < ?php the_title(); ?> < /h3> < /div> < /div> < /a> < /div> < ?php endwhile; ?> < /div> < ?php } wp_reset_postdata(); ?>

一切正常, 直到我添加the_category(); 。
现在, 当我检查盒子时, 我会看到:
< div class="featured-home-img" style="background-image: url(bag.jpg); "> < a href="http://www.srcmini.com/my-favorite-bag/"> < /a> < div class="blog-info-content"> < a href="http://www.srcmini.com/my-favorite-bag/"> < span class="cat"> < /span> < /a> < ul class="post-categories"> < a href="http://www.srcmini.com/my-favorite-bag/"> < /a> < li> < a href="http://www.srcmini.com/my-favorite-bag/"> < /a> < a href="http://www.srcmini.com/category-culture/" rel="category tag"> Culture< /a> < /li> < li> < a href="http://www.srcmini.com/category-featured/" rel="category tag"> Featured< /a> < /li> < /ul> < h3> My Favorite Bag< /h3> < /div> < /div>

一遍又一遍地复制带有” my-favorite-bag” (永久链接)的锚链接。另外, 正如我期望的那样, 该类别未包含在” cat” 类的范围内。
为什么只有在添加the_category或get_the_category时才会发生这种情况?
如何在此循环中显示每个帖子的类别?
#1获取类别的最简单方法是将当前帖子ID传递给get_the_category()函数。
$post_id = get_the_ID(); // or use the post id if you already have it $category_object = get_the_category($post_id); $category_name = $category_object[0]-> name;

get_the_category()函数返回一个对象, 该对象包含诸如类别ID, 名称等的属性。
另外, 请注意, 在使用多个wordpress循环时, 可能必须调用wp_reset_postdata()才能重置为原始查询。
你可以在这里阅读更多:
WordPress的Wp_Query
get_the_category()
#2你可以通过多种方式获得类别名称:
在帖子循环中, 如果你的帖子只有一个类别, 则用作:
$cats = get_the_category(); $cat_name = $cats[0]-> name;

如果你的帖子有两个以上的类别, 则可以查找get_the_category_list()。
参考链接:https://codex.wordpress.org/Function_Reference/get_the_category_list。
获取此类别的链接, 你可以使用
$category = get_the_category(); echo '< a href="'.get_category_link($category[0]-> cat_ID).'"> < img src="'.$category[0]-> cat_name.'" alt="'.$category[0]-> cat_name.'" /> < /a> ';

在使用类别存档时(可以在循环之前将类别名称保存到$ cat_name变量中使用):
$cat_name = get_category(get_query_var('cat'))-> name;

参考链接:http://codex.wordpress.org/Function_Reference/get_category
#3试试这个…
【在WordPress的循环中显示每个帖子的类别名称】它会自动创建< ul> < li> < a href=http://www.srcmini.com/” permalink” > 类别名称< /a> < / li> < / ul> 结构, 并使用永久链接显示名称。这应该适用于所有选项。
< ?php the_category() ?>

    推荐阅读