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

如何在WordPress中列出指定父页面子页面使用的分类?

解决WordPress父页面展示子页面所用分类的问题

要实现页面ID30展示其所有子页面使用的分类,核心思路是先获取子页面集合→收集所有子页面关联的分类→去重后输出分类信息,以下是具体实现方案:

步骤1:获取指定父页面的所有子页面

使用get_pages()函数筛选出父ID为30的所有已发布子页面:

$child_pages = get_pages(array(
    'parent' => 30, // 指定父页面ID
    'post_type' => 'page',
    'post_status' => 'publish'
));

步骤2:收集子页面关联的分类ID并去重

遍历子页面,用wp_get_post_terms()获取每个页面绑定的分类(前提是已给页面类型开启分类支持),收集ID后去重避免重复展示:

$category_ids = array();
foreach ($child_pages as $page) {
    // 获取当前页面的分类ID集合
    $page_categories = wp_get_post_terms($page->ID, 'category', array('fields' => 'ids'));
    if (!empty($page_categories)) {
        $category_ids = array_merge($category_ids, $page_categories);
    }
}
// 去重处理
$unique_category_ids = array_unique($category_ids);

步骤3:获取分类详细信息并输出

用get_terms()(比get_categories()更灵活)根据去重后的ID获取分类数据,循环输出分类列表:

if (!empty($unique_category_ids)) {
    $categories = get_terms(array(
        'taxonomy' => 'category',
        'include' => $unique_category_ids,
        'hide_empty' => false // 即使分类下无内容也显示
    ));

    // 输出分类列表
    echo '<ul class="child-page-categories">';
    foreach ($categories as $cat) {
        echo '<li><a href="' . esc_url(get_category_link($cat->term_id)) . '">' . esc_html($cat->name) . '</a></li>';
    }
    echo '</ul>';
} else {
    echo '<p>暂无子页面使用的分类</p>';
}

完整短代码封装(方便页面编辑器调用)

如果想直接在页面编辑器中插入调用,可将代码封装为短代码,添加到主题functions.php:

add_shortcode('show_child_page_categories', function() {
    $child_pages = get_pages(array(
        'parent' => 30,
        'post_type' => 'page',
        'post_status' => 'publish'
    ));

    $category_ids = array();
    foreach ($child_pages as $page) {
        $page_categories = wp_get_post_terms($page->ID, 'category', array('fields' => 'ids'));
        if (!empty($page_categories)) {
            $category_ids = array_merge($category_ids, $page_categories);
        }
    }

    $unique_category_ids = array_unique($category_ids);

    if (empty($unique_category_ids)) {
        return '<p>暂无子页面使用的分类</p>';
    }

    $categories = get_terms(array(
        'taxonomy' => 'category',
        'include' => $unique_category_ids,
        'hide_empty' => false
    ));

    $output = '<ul class="child-page-categories">';
    foreach ($categories as $cat) {
        $output .= '<li><a href="' . esc_url(get_category_link($cat->term_id)) . '">' . esc_html($cat->name) . '</a></li>';
    }
    $output .= '</ul>';

    return $output;
});

添加完成后,在页面ID30的编辑器中插入[show_child_page_categories]即可显示分类列表。

注意事项

  • 若页面未开启分类支持,需在functions.php中添加以下代码开启:
    add_action('init', function() {
        register_taxonomy_for_object_type('category', 'page');
    });
    
  • 代码中使用esc_url()和esc_html()做安全转义,避免XSS风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:09:53