
本文介绍如何将 woocommerce 单产品页中默认静态的“related products”标题,替换为可点击的链接,指向该商品所属的最末端产品分类目录页面,从而提升用户体验与 seo 可发现性。
本文介绍如何将 woocommerce 单产品页中默认静态的“related products”标题,替换为可点击的链接,指向该商品所属的最末端产品分类目录页面,从而提升用户体验与 seo 可发现性。
在 WooCommerce 默认主题中,单产品页底部的“相关商品”(Related products)标题仅是一个纯文本 <h2> 标签,无法直接跳转——这错失了引导用户深入浏览同类商品的重要机会。虽然开发者常尝试通过 gettext 钩子修改翻译文本并注入 HTML,但因 esc_html() 的严格过滤,该方式无法安全输出链接;而更可靠的方案是覆盖 WooCommerce 模板文件,实现语义清晰、结构可控的定制化标题。
✅ 推荐方案:覆盖 related.php 模板
WooCommerce 支持模板覆写机制。请按以下步骤操作:
在您的子主题目录下创建路径:
yourtheme/woocommerce/single-product/related.php复制官方模板内容(推荐从 WooCommerce v3.9+ 源码 获取最新版),定位到原第 29–32 行(即渲染标题的逻辑):
if ( $heading ) :
?>
<h2><?php echo esc_html( $heading ); ?></h2>
<?php endif; ?>- 替换为以下增强代码(支持自动获取末级分类并生成有效链接):
<?php if ( $heading ) : ?>
<?php
global $product;
// 确保 $product 是有效的 WC_Product 实例
if ( is_a( $product, 'WC_Product' ) ) {
$terms = wp_get_post_terms( $product->get_id(), 'product_cat', [
'fields' => 'all',
'orderby' => 'term_id',
'order' => 'DESC'
] );
// 取最后一个(即最深层级)分类(注意:若需“最末级”而非“最后注册”,建议用 get_terms + child_of 判断)
$end_term = ! empty( $terms ) ? end( $terms ) : false;
if ( $end_term && ! is_wp_error( $end_term ) ) {
$term_link = get_term_link( $end_term->term_id, 'product_cat' );
if ( is_wp_error( $term_link ) ) {
echo '<h2>' . esc_html( $heading ) . '</h2>';
} else {
echo '<h2><a href="' . esc_url( $term_link ) . '" class="related-products-heading-link">'
. esc_html( $end_term->name )
. '</a></h2>';
}
} else {
echo '<h2>' . esc_html( $heading ) . '</h2>';
}
} else {
echo '<h2>' . esc_html( $heading ) . '</h2>';
}
?>
<?php endif; ?>⚠️ 注意事项与优化建议
- 分类层级逻辑说明:上述代码使用 end($terms) 获取最后返回的分类,适用于多数按 ID 顺序注册的场景;如需精准匹配“无子分类”的末级节点,建议改用递归查询或 get_terms(['parent' => 0]) 结合 wp_get_object_terms() 进行深度判断。
- 安全性保障:始终使用 esc_url() 处理链接、esc_html() 处理文本,避免 XSS 风险。
- 样式兼容性:新增的 <a> 标签已包裹在 <h2> 内,语义合规;您可通过 CSS 类 .related-products-heading-link 自定义外观(例如添加 display: block; font-weight: bold; 等)。
- 性能提醒:wp_get_post_terms() 已被缓存,无需额外优化;但若站点分类极多,可考虑添加 cache_key 或对象缓存插件支持。
完成覆写后,刷新页面即可看到“相关商品”标题已变为可点击的末级分类链接——既保持原有结构语义,又显著增强导航能力。此方法稳定、可维护,且完全遵循 WooCommerce 官方模板扩展规范。

















