WordPress主题home.php做博客页时无法正确获取页面标题与特色图
问题原因
当你在WordPress后台完成静态首页配置、单独指定博客页面作为文章列表页后,WordPress会自动改写该页面对应的全局主查询规则:原本查询单页面数据的逻辑会被替换为查询最新文章列表的逻辑。此时全局$post对象默认指向文章列表的第一篇文章,直接调用the_title()、the_post_thumbnail()这类默认读取全局$post的模板标签时,自然会输出第一篇文章的内容,而非你创建的博客页面本身的属性。
page.php、front-page.php没有该问题的原因是:page.php对应普通单页面的模板,主查询始终查询当前页面本身的数据;front-page.php是静态首页专属模板,主查询也对应静态首页的页面数据,不会被替换为文章列表查询。
解决方法
通过WordPress内置选项读取博客页面的ID,直接基于ID获取页面的标题和特色图即可,该方案不会影响后续正常的文章列表循环输出,是兼容性最高的处理方式。
修改后的home.php参考代码如下:
<?php get_header(); ?> <?php // 读取后台设置的博客页面ID $blog_page_id = get_option( 'page_for_posts' ); ?> <section class="header--page"> <div class="header--img"> <?php echo get_the_post_thumbnail( $blog_page_id ); ?> </div> <div class="container"> <h1><?php echo get_the_title( $blog_page_id ); ?></h1> </div> </section> <!-- 下方可以正常编写博客列表的循环逻辑 --> <?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <!-- 此处编写单篇文章的输出代码 --> <?php endwhile; ?> <!-- 分页代码可放在此处 --> <?php endif; ?> <?php get_footer(); ?>
内容的提问来源于stack exchange,提问作者Beatles BOB
相关产品推荐
相关产品推荐

