WordPress自定义文章类型分类层级显示问题:详情页展示父分类
解决WordPress自定义文章类型分类父级显示问题
嘿,我刚好做过类似的公寓预订系统,这个需求其实不难实现,咱们一步步来搞定它:
首先,先确认你的自定义分类是层级化的(你已经设置了Countries->Spain->Barcelona这种结构,这步没问题)。接下来,你需要在公寓单页的模板文件里(比如single-apartments.php,或者你用来渲染页面头部的header.php对应位置)添加一段代码,用来获取当前公寓所属分类的直接父级并输出。
具体代码实现
下面是经过安全处理的代码,你可以直接复制使用,记得替换里面的分类slug:
// 先获取当前公寓文章所属的自定义分类(把'apartment_locations'换成你实际的分类slug) $terms = get_the_terms( get_the_ID(), 'apartment_locations' ); // 检查是否成功获取到分类,且没有错误 if ( $terms && ! is_wp_error( $terms ) ) { foreach ( $terms as $term ) { // 找到有父级的分类(因为Barcelona的parent是Spain,Athenes的parent是Greece) if ( $term->parent != 0 ) { // 获取父分类的对象 $parent_term = get_term( $term->parent, 'apartment_locations' ); if ( $parent_term && ! is_wp_error( $parent_term ) ) { // 输出父分类名称,这里可以根据你的UI需求调整标签和样式 echo '<h2 class="page-header-parent-location">' . esc_html( $parent_term->name ) . '</h2>'; // 如果需要给父分类加链接(跳转到西班牙/希腊的公寓列表页),用下面这段替换上面的echo: // echo '<h2 class="page-header-parent-location"><a href="' . esc_url( get_term_link( $parent_term ) ) . '">' . esc_html( $parent_term->name ) . '</a></h2>'; break; // 找到第一个符合条件的父分类就停止循环,避免重复输出 } } } }
几个注意点
- 一定要替换
apartment_locations为你创建分类时设置的分类slug,如果不确定可以去WordPress后台的分类编辑页面看地址栏里的参数 - 如果你想把这段代码放在全局的
header.php里,记得加个判断,确保只在公寓单页显示:if ( is_singular( 'apartments' ) ) { // 上面的核心代码放在这里 } - 代码里用了
esc_html()和esc_url()做安全转义,这是WordPress开发的最佳实践,能避免XSS安全漏洞 - 如果你的公寓文章可能同时属于多个子分类,这段代码会取第一个遇到的有父级的分类,要是需要处理多分类场景,可以去掉
break或者调整循环逻辑
内容的提问来源于stack exchange,提问作者hetious
相关产品推荐
相关产品推荐

