分类页跟首页很像,区别是:顶部要显示“这是哪个分类”。
<?php get_header(); ?>
<div class="content">
<h1><?php single_cat_title(); ?></h1>
<?php if ( category_description() ) : ?>
<div class="cat-desc"><?php echo category_description(); ?></div>
<?php endif; ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article class="post-item">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php the_excerpt(); ?></p>
</article>
<?php endwhile; endif; ?>
<?php the_posts_pagination( array( 'prev_text' => '上一页', 'next_text' => '下一页' ) ); ?>
</div>
<?php get_footer(); ?>
single_cat_title():输出当前分类名(直接输出,不返回);category_description():输出分类描述(后台“分类目录”里填的那段);the_posts_pagination():分页(主查询)。注意 category_description() 外面那层 if:分类没填描述时,它返回空字符串,直接输出会留一个空的 div。
两个选择:
tag.php:内容跟 category.php 几乎一样,只是把 single_cat_title() 换成 single_tag_title();archive.php:分类、标签、日期归档通用,内部用 is_category() 等判断显示什么标题。推荐第二种。archive.php 一个文件管三种页面,不用维护三份。
一个通用写法:
<?php
if ( is_category() ) {
$title = single_cat_title( '', false );
} elseif ( is_tag() ) {
$title = single_tag_title( '', false );
} elseif ( is_date() ) {
$title = get_the_archive_title();
} else {
$title = '文章归档';
}
?>
<h1><?php echo esc_html( $title ); ?></h1>
注意这里用的是 single_cat_title('', false)——第二个参数 false 表示“返回字符串,不直接输出”。这样才能拼进变量。
分类页最容易出的问题是“内容重复”:多个分类页显示同一批文章。
解决办法:
category_description 有东西可输出);一句话记住:分类页 = 分类标题 + 描述 + 循环 + 分页;标签页可用一个 archive.php 统一管。
下一篇做独立页面。