WordPress单页站点:如何在#portfolio容器加载文章而非首页内容?
解决单页站点中Portfolio容器加载指定文章的问题
你碰到的核心问题是:单页模板里默认的have_posts()循环会调用当前页面(也就是首页)的主查询,所以才会显示首页的内容。要在#portfolio容器里加载你想要的Portfolio文章,你需要创建一个自定义查询来精准获取目标内容,而不是用默认的主循环。
下面是调整后的完整代码,我给你加了详细注释:
<div id="portfolio"> <div class="head-title col-md-12"> <h1 class="h1b">Portfolio</h1> </div> <?php // 定义自定义查询参数,按需修改 $portfolio_args = array( 'post_type' => 'post', // 如果是自定义文章类型(比如专门的portfolio类型),改成对应的名称 'posts_per_page' => -1, // 加载所有相关文章,也可以设成固定数字比如6 'category_name' => 'portfolio', // 筛选属于"portfolio"分类的文章,替换成你的分类别名 'orderby' => 'date', // 按发布时间排序 'order' => 'DESC' // 最新的在前 ); // 初始化自定义查询对象 $portfolio_query = new WP_Query($portfolio_args); // 检查是否有匹配的文章 if ($portfolio_query->have_posts()) : // 开始循环遍历文章 while ($portfolio_query->have_posts()) : $portfolio_query->the_post(); ?> <!-- 单个Portfolio项目的结构,你可以根据自己的样式调整 --> <div class="portfolio-item"> <!-- 显示文章缩略图 --> <?php if (has_post_thumbnail()) : ?> <div class="portfolio-thumb"> <?php the_post_thumbnail('medium'); // 可以换成'large'或自定义尺寸 ?> </div> <?php endif; ?> <!-- 文章标题 --> <h3 class="portfolio-title"><?php the_title(); ?></h3> <!-- 文章摘要(如果要显示全文,把the_excerpt()换成the_content()) --> <div class="portfolio-excerpt"> <?php the_excerpt(); ?> </div> </div> <?php endwhile; // 必须重置查询!恢复主查询的全局变量,避免影响页面其他部分 wp_reset_postdata(); else : // 没有找到文章时的提示 echo '<p>暂时没有Portfolio项目可以展示哦~</p>'; endif; ?> </div>
几个关键注意点:
- 自定义文章类型适配:如果你为Portfolio创建了专门的自定义文章类型(比如注册了
portfolio类型),记得把post_type的值改成对应的名称,这样就能精准获取这类文章。 - 缩略图功能开启:如果你的主题还没开启文章缩略图,需要在
functions.php里添加一行代码:add_theme_support('post-thumbnails');,否则has_post_thumbnail()会返回false,缩略图就显示不出来了。 - 精准筛选文章:如果不想用分类筛选,也可以直接指定文章ID,比如用
'post__in' => array(123, 456)来加载ID为123和456的文章,同时加上'orderby' => 'post__in'可以保持你指定的顺序。
这样修改后,#portfolio容器里就会显示你指定的Portfolio文章,而不是首页内容啦~
内容的提问来源于stack exchange,提问作者amyvl
相关产品推荐
相关产品推荐

