WordPress Query板块无Related选项,单篇文章页需显示相关文章求助
WordPress区块编辑器的Query区块没有原生的「相关文章」选项,你可以通过以下两种方式实现按分类/标签匹配的相关文章展示:
方法一:自定义代码实现(灵活可控)
适合有基础代码能力的用户,能精准控制匹配规则:
添加获取相关文章的函数
打开主题的functions.php(推荐用子主题,避免主题更新覆盖代码),插入以下代码:function get_related_posts_by_taxonomy($post_id, $taxonomy = 'category', $limit = 3) { // 获取当前文章的分类/标签ID集合 $terms = wp_get_post_terms($post_id, $taxonomy, array('fields' => 'ids')); if (empty($terms)) return false; // 构建查询参数 $args = array( 'post_type' => 'post', 'posts_per_page' => $limit, 'post__not_in' => array($post_id), // 排除当前文章 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'id', 'terms' => $terms, 'operator' => 'IN' ) ), 'orderby' => 'rand', // 随机排序,可改为date按发布时间排序 'no_found_rows' => true, // 优化查询性能 ); // 若需固定仅显示news分类的文章,替换上方tax_query为这段: // $args['tax_query'] = array( // array( // 'taxonomy' => 'category', // 'field' => 'slug', // 'terms' => 'news', // ) // ); $related_posts = new WP_Query($args); return $related_posts; }在文章模板中调用函数
打开单篇文章模板文件(如single.php),在需要显示相关文章的位置插入以下代码;或者在区块编辑器中添加「代码片段」/「自定义HTML」区块,切换到PHP模式插入:<?php $current_post_id = get_the_ID(); // 按标签匹配则把第二个参数改为'post_tag' $related_posts = get_related_posts_by_taxonomy($current_post_id, 'category', 3); if ($related_posts->have_posts()) : ?> <h3>相关文章</h3> <ul> <?php while ($related_posts->have_posts()) : $related_posts->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php wp_reset_postdata(); // 重置查询,避免影响后续内容 endif; ?>
方法二:无代码区块组合实现(快速上手)
适合非技术用户,用原生区块完成配置:
- 添加「查询循环」区块,进入区块设置的「查询」面板
- 在「选择文章依据」中选择「分类」(按标签匹配则选「标签」),然后选中目标分类(如news)
- 找到「排除」选项,勾选「当前文章」,避免显示自身
- 调整「显示数量」「排序方式」等参数,再用列表/网格区块美化展示样式
注意事项
- 第三方主题建议用子主题修改代码,防止主题更新丢失自定义内容
- SiteGround主机不影响该功能实现,只要主题支持区块编辑器或自定义代码修改即可
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

