caogenbj 就缺这两个(卷一第 3 篇讲过后果):缺 search.php,搜索结果页跟首页长得一样;缺 404.php,访客输错地址看到的是一堆文章。
这一篇把它们补上。
<?php get_header(); ?>
<div class="content">
<h1>搜索「<?php echo esc_html( get_search_query() ); ?>」</h1>
<?php if ( have_posts() ) : ?>
<p class="search-count">找到 <?php global $wp_query; echo $wp_query->found_posts; ?> 篇</p>
<ul class="search-list">
<?php while ( have_posts() ) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<div class="post-meta"><?php the_time( 'Y-m-d' ); ?></div>
</li>
<?php endwhile; ?>
</ul>
<?php the_posts_pagination(); ?>
<?php else : ?>
<p>没有找到相关内容。换个关键词试试?</p>
<?php get_search_form(); ?>
<?php endif; ?>
</div>
<?php get_footer(); ?>
三个要点:
<?php get_header(); ?>
<div class="content error-404">
<h1>页面不存在</h1>
<p>你要找的页面可能已经删除、改名,或者地址输错了。</p>
<p>你可以:</p>
<ul>
<li><a href="<?php echo esc_url( home_url('/') ); ?>">回首页</a></li>
<li>用下面的搜索框找找</li>
</ul>
<?php get_search_form(); ?>
<h2>最新文章</h2>
<ul>
<?php
$latest = new WP_Query( array( 'posts_per_page' => 5, 'ignore_sticky_posts' => 1 ) );
while ( $latest->have_posts() ) {
$latest->the_post();
echo '<li><a href="' . esc_url( get_permalink() ) . '">' . esc_html( get_the_title() ) . '</a></li>';
}
wp_reset_postdata();
?>
</ul>
</div>
<?php get_footer(); ?>
404 页的三件事:
404 页应该返回 HTTP 404 状态码。WordPress 默认会返回,但如果你在 404 页里做了什么奇怪的操作(比如手动 header('HTTP/1.1 200 OK')),就变成了“软 404”,搜索引擎会把不存在的页面当成正常页面收录。
检查方法:访问一个不存在的地址,用开发者工具看状态码是不是 404。
一句话记住:search.php 要显示搜索词和结果数;404.php 要说清楚 + 给出路 + 给内容;状态码必须是真 404。
下一篇做侧栏和搜索框。