You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中如何用wp_list_pages()仅显示当前父层级目录

WordPress动态层级目录实现方案

核心思路

  • 普通页面:自动识别当前页面的最顶级父页面,输出该父页面及其所有子页面
  • 自定义文章类型(CPT)单页:通过URL解析匹配对应的页面层级,找到关联的顶级页面后输出其下属目录

完整可运行代码

<?php
// 初始化顶级页面ID
$top_level_page_id = 0;

// 处理自定义文章类型单页(替换customPostTypeName为你的CPT注册名称)
if (is_singular('customPostTypeName')) {
    // 获取当前URL并解析父级slug
    $current_url = esc_url_raw($_SERVER['REQUEST_URI']);
    // 匹配URL中的routes-and-maps路径(根据你的重写规则调整)
    if (strpos($current_url, '/routes-and-maps/') !== false) {
        // 通过slug获取对应页面ID
        $target_page = get_page_by_path('routes-and-maps');
        if ($target_page) {
            $top_level_page_id = $target_page->ID;
        }
    }
} else {
    // 处理普通页面
    global $post;
    // 获取当前页面的所有祖先ID(从近到远排序)
    $ancestors = get_post_ancestors($post->ID);
    // 确定顶级页面:有祖先则取最顶级,无则用当前页面
    $top_level_page_id = !empty($ancestors) ? end($ancestors) : $post->ID;
}

// 输出层级目录
if ($top_level_page_id) {
?>
<nav id="navStandard" class="sidebar-nav well">
    <ul>
        <?php
        wp_list_pages(array(
            'depth' => 2,
            'child_of' => $top_level_page_id,
            'title_li' => '',
            'exclude' => '32891,32893' // 保留你需要排除的页面ID
        ));
        ?>
    </ul>
</nav>
<?php
}
?>

关键修复说明

  1. 解决数组转字符串错误:
    原代码固定取$grandparent[1],当页面只有一级父级时会导致数组越界,现在通过end($ancestors)动态获取最顶级父页面ID,确保参数始终有效。

  2. CPT页面关联层级问题:
    原代码依赖post_parent字段,但CPT的post_parent通常不关联页面层级。现在通过URL中的slug匹配,直接找到对应的页面ID,完美适配你重写后的URL结构。

  3. 简化逻辑:
    合并两次wp_list_pages调用为一次,用child_of参数直接输出顶级页面及其子页面,避免原代码中参数切换导致的混乱。

内容的提问来源于stack exchange,提问作者Lars Martinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:02:07