
在 WordPress 自定义分类模板(如 genre.php)中,直接使用 $term->slug 仅输出 slug 字符串,无法构成完整可访问的分类归档 URL;应使用 get_term_link() 函数获取符合注册规则的完整链接,确保 URL 包含自定义分类基础路径(如 /genre/action)。
在 wordpress 自定义分类模板(如 genre.php)中,直接使用 `$term->slug` 仅输出 slug 字符串,无法构成完整可访问的分类归档 url;应使用 `get_term_link()` 函数获取符合注册规则的完整链接,确保 url 包含自定义分类基础路径(如 `/genre/action`)。
在 WordPress 开发中,为自定义分类法(如 genre)构建术语列表页时,一个常见误区是误将术语 slug 当作完整 URL 使用。例如,$term->slug 返回的是 action,而你真正需要的是类似 http://localhost/site/genre/action 的有效归档链接——该路径由 WordPress 根据分类法注册时设定的 rewrite 规则动态生成。
正确的做法是调用 get_term_link( $term )(支持传入 term 对象或 ID),它会自动解析当前站点结构、分类法重写规则及多语言/多站点上下文,返回标准化、可点击的归档 URL。相比手动拼接(如 home_url('/genre/' . $term->slug)),此函数具备以下优势:
- ✅ 兼容自定义 rewrite 基础(如 'rewrite' => ['slug' => 'genre'])
- ✅ 支持层级分类(如子术语自动处理 /genre/action/thriller)
- ✅ 兼容插件(如 WPML、Polylang)的多语言路由
- ✅ 避免因 permalink 设置变更导致链接失效
✅ 修正后的关键代码段:
<a class="item" href="<?php echo esc_url( get_term_link( $term ) ); ?>" title="<?php echo esc_attr( $term->name ); ?>">
⚠️ 重要注意事项:
- 务必对输出的 URL 使用 esc_url() 进行转义,防止 XSS 漏洞;
- 对 title 属性使用 esc_attr(),保障 HTML 安全;
- 若 get_term_link() 抛出错误(如分类法未正确注册),建议增加容错判断:
$term_link = get_term_link( $term ); if ( is_wp_error( $term_link ) ) continue; // 跳过无效术语
- 确保 genre 分类法注册时已启用 public => true 和 has_archive => true(或通过 rewrite 显式声明),否则归档页将不可访问。
通过以上调整,你的 genre.php 模板即可稳定输出形如 https://yoursite.com/genre/action 的标准分类链接,既符合 WordPress 最佳实践,也保证了 SEO 友好性与用户体验一致性。


















