WP_Query类或
get_posts()函数,通过设置
'category_name'或
'cat'参数指定目标分类,也可在模板文件中直接使用
query_posts()实现分类文章列表的查询与展示。
在WordPress中调用特定分类的文章是常见需求,无论是展示专题内容还是构建分类归档页,以下是四种主流方法,适用于不同技术水平的用户:
使用区块编辑器(新手推荐)
适用于古腾堡编辑器用户,无需代码:
- 编辑文章/页面时添加 「最新文章」区块
- 在右侧面板的 「区块设置」→「查询设置」 中
- 选择 「按分类筛选」 并指定目标分类
- 调整显示数量、排序方式(日期/标题等)和布局样式
- 更新页面即可实时显示该分类下的文章列表
优势:可视化操作,实时预览,支持响应式布局
局限:自定义程度有限,依赖主题兼容性
短代码调用(中等难度)
通过插件或主题内置功能实现:
- 安装轻量级插件 「Display Posts Shortcode」(10万+活跃安装)
- 在任意页面/文章插入短代码:
[display-posts category="技术教程" posts_per_page="5" orderby="date"] - 常用参数:
category="slug或ID"(分类别名或ID)posts_per_page="数量"order="ASC/DESC"(升序/降序)include_excerpt="true"(显示摘要)
技巧:用
category_display="list"生成带样式的列表,wrapper_class="custom-class"添加自定义CSS
WP_Query 代码调用(开发者方案)
在主题模板文件(如 sidebar.php 或自定义模板)中添加:
<?php
$cat_query = new WP_Query( array(
'category_name' => 'news', // 分类别名
'posts_per_page' => 6, // 显示篇数
'orderby' => 'modified' // 按修改时间排序
));
if ( $cat_query->have_posts() ) :
while ( $cat_query->have_posts() ) : $cat_query->the_post(); ?>
<article>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<time><?php the_date(); ?></time>
<p><?php echo wp_trim_words(get_the_excerpt(), 20); ?></p>
</article>
<?php endwhile;
wp_reset_postdata(); // 重置查询
endif; ?>
关键参数:
category__in:按分类ID数组调用ignore_sticky_posts:忽略置顶文章tax_query:多分类联合查询
分类归档页定制(SEO优化方案)
直接优化分类默认页面(如 /category/news/):
- 创建
category-{slug}.php模板(如category-news.php) - 使用标准循环结构:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); // 调用文章内容模板 get_template_part( 'template-parts/content', 'archive' ); endwhile; // 分页导航 the_posts_pagination( array( 'mid_size' => 2 ) ); endif; ?>
注意事项
- 性能优化:
- 控制
posts_per_page避免加载过多文章 - 对静态页面使用缓存插件(如 WP Rocket)
- 频繁更新的列表建议设置
'cache_results' => false
- 控制
- SEO 友好性:
- 为分类列表添加结构化数据(Schema ArticleList)
- 确保分页标签包含
rel="prev/next"属性 - 使用
<h2>而非<h1>保持层级清晰
- 移动端适配:
- 测试列表在移动设备的触摸滑动体验
- 图片使用
srcset响应式加载
方法选择建议
| 用户类型 | 推荐方案 | 工具依赖 |
|---|---|---|
| 普通编辑 | 区块编辑器 | WordPress 原生 |
| 主题开发者 | WP_Query 定制 | 代码编辑器 |
| SEO 优化需求 | 分类归档页模板 | 子主题文件 |
所有方案均需遵循 WordPress 编码标准,修改核心文件前务必创建子主题,数据调用优先使用
WP_Query而非query_posts()避免主循环冲突。
引用说明:
[1] WordPress官方区块编辑器文档 https://wordpress.org/support/article/wordpress-editor/
[2] Display Posts插件参数手册 https://displayposts.com/docs/
[3] WP_Query类参考(开发者资源) https://developer.wordpress.org/reference/classes/wp_query/
[4] Google E-A-T算法指南 https://developers.google.com/search/docs/essentials/experience-entity
