WordPress中the_post_thumbnail()在front-page.php不生效问题求助
问题根本原因
archive.php属于WordPress原生归档模板,默认主查询($wp_query)自动对应对应分类/标签/日期的文章列表,所以直接调用have_posts()可以正常获取到文章。但front-page.php的主查询默认匹配后台「设置-阅读」中指定的首页内容:如果设置为静态页,主查询只会返回该静态页的单条数据,不会返回文章列表,所以模板片段里的循环直接失效。
解决步骤
1. 修改section-portfolio.php代码,改用自定义查询
把原来的循环替换为自定义文章查询,示例代码如下:
<?php // 自定义查询,获取已发布的文章,可自行调整参数 $custom_posts = new WP_Query(array( 'post_type' => 'post', // 如果是自定义文章类型就改成对应别名 'posts_per_page' => 8, // 展示的文章数量 'post_status' => 'publish' )); if($custom_posts->have_posts()): while($custom_posts->have_posts()): $custom_posts->the_post();?> <div class="col-6"> <a id="client-project" href="<?php the_permalink();?>"> <?php the_post_thumbnail();?> </a> </div> <?php endwhile; // 重置主查询,避免影响页面其他逻辑 wp_reset_postdata(); else: ?> <p>暂无展示的文章</p> <?php endif;?>
2. front-page.php调用方式不变
还是和archive.php一样用<?php get_template_part('includes/section-portfolio');?>调用即可,无需直接复制循环代码到front-page,模板片段的方式更利于后续维护。
注意事项
- 先排查文件名拼写问题:你创建的模板片段文件名为
section-portoflio.php,如果调用时使用get_template_part('includes/section-portfolio'),会因为拼写不一致导致模板加载失败,需确保文件名和调用参数拼写完全匹配。 - 如果要查询的是自定义文章类型(比如作品/项目),把
post_type参数改成对应文章类型的别名即可 - 可根据需求调整查询参数,比如加
category_name指定分类,加orderby自定义排序规则 - 自定义查询后必须加
wp_reset_postdata()重置全局的$post变量,否则会导致页面其他调用文章信息的逻辑出错
内容的提问来源于stack exchange,提问作者Mateus Rodrigues
相关产品推荐
相关产品推荐

