WordPress自定义文章类型父级链接获取问题求助
问题分析与解决方案
问题根源主要有两点:
- 自定义文章类型(CPT)可能未开启层级支持,导致
$post->post_parent无法正确获取父级ID,甚至返回当前文章ID - 原代码未判断父级是否存在,且
$pageID变量大概率未正确定义(直接复用了当前文章ID),导致重复显示当前页面
1. 确认自定义文章类型的层级配置
检查注册CPT的代码,确保开启了层级支持并启用页面属性(用于设置父级):
register_post_type('your_cpt_slug', array( // 其他配置参数 'hierarchical' => true, // 必须设为true才能支持父级关系 'supports' => array('title', 'editor', 'page-attributes'), // 包含page-attributes才能在后台设置父级 ));
2. 修正面包屑代码
替换原有代码,增加父级存在判断,同时做安全转义处理:
<div class="breadcrumbs"> <a class="current-page pink_arrow" href="<?php echo esc_url(get_home_url()); ?>">Home</a> <?php global $post; // 仅当存在有效父级(非首页)时显示父级链接 if ($post->post_parent != 0 && $post->post_parent != get_option('page_on_front')) { $parent_post = get_post($post->post_parent); ?> <a class="pink_arrow" href="<?php echo esc_url(get_permalink($parent_post->ID)); ?>"><?php echo esc_html(get_the_title($parent_post->ID)); ?></a> <?php } // 显示当前页面 ?> <a href="<?php echo esc_url(get_permalink($post->ID)); ?>"><?php echo esc_html(get_the_title($post->ID)); ?></a> </div>
扩展:支持多层级父级
如果你的CPT存在多层级嵌套(父级还有父级),可以用递归函数生成完整的层级链:
// 递归获取所有父级面包屑 function get_cpt_hierarchy_breadcrumbs($post) { $breadcrumbs = array(); while ($post->post_parent != 0 && $post->post_parent != get_option('page_on_front')) { $post = get_post($post->post_parent); $breadcrumbs[] = '<a class="pink_arrow" href="' . esc_url(get_permalink($post->ID)) . '">' . esc_html(get_the_title($post->ID)) . '</a>'; } return array_reverse($breadcrumbs); } // 在面包屑中调用 <div class="breadcrumbs"> <a class="current-page pink_arrow" href="<?php echo esc_url(get_home_url()); ?>">Home</a> <?php global $post; $parent_crumbs = get_cpt_hierarchy_breadcrumbs($post); foreach ($parent_crumbs as $crumb) { echo $crumb; } ?> <a href="<?php echo esc_url(get_permalink($post->ID)); ?>"><?php echo esc_html(get_the_title($post->ID)); ?></a> </div>
内容的提问来源于stack exchange,提问作者alib0ng0
相关产品推荐
相关产品推荐

