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

时间:2016-02-02 22:58:16

标签: php html wordpress wordpress-theming

我正在修改一个预先构建的主题,以便在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="<?php the_permalink(); ?>">
            <div class="featured-home-img" <?php
            if ( $thumbnail_id = get_post_thumbnail_id() ) {
                if ( $image_src = 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="my-favorite-bag/"></a>
    <div class="blog-info-content">
        <a href="my-favorite-bag/">
            <span class="cat"></span>
        </a>
        <ul class="post-categories">
            <a href="my-favorite-bag/"></a>
            <li>
                <a href="my-favorite-bag/"></a>
                <a href="category-culture/" rel="category tag">Culture</a>
            </li>
            <li>
                <a href="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时才会发生这种情况?

如何在此循环中显示每个帖子的类别?

3 个答案:

答案 0 :(得分:3)

获取类别的最简单方法是将get_the_category()函数传递给当前帖子ID。

$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()

答案 1 :(得分:1)

您可以通过多种方式获取类别名称:

在帖子循环中,如果您的帖子只有一个类别,则用作:

$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

答案 2 :(得分:1)

尝试这个...

它会自动创建一个<ul><li><a href="permalink">category name</a></li></ul>结构,并使用永久链接显示名称。这应该适用于所有选项。

 <?php the_category() ?>