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

如何修改PHP代码实现WordPress单页父子分类列表指定格式输出

解决WordPress single.php中分类列表按父分类分组显示的问题

要实现每个父分类对应一个<ul>,父分类标题带parent_cat_title类,子分类带child_cat类的格式,需要重构现有代码,不再依赖wp_list_categories的默认输出,而是手动整理分类结构并渲染:

修改后的完整代码

<?php
$taxonomy = 'category';
// 获取当前文章关联的所有分类,包含完整分类数据
$post_terms = wp_get_object_terms(get_the_ID(), $taxonomy, array(
    'fields' => 'all',
    'orderby' => 'parent',
    'order' => 'ASC'
));

if (!empty($post_terms) && !is_wp_error($post_terms)) {
    $parent_cats = array();

    // 整理父分类和对应的子分类
    foreach ($post_terms as $term) {
        // 处理顶级分类(父ID为0)
        if ($term->parent == 0) {
            $parent_cats[$term->term_id] = array(
                'term' => $term,
                'children' => array()
            );
        } else {
            // 处理子分类,归属到对应的父分类下
            if (isset($parent_cats[$term->parent])) {
                $parent_cats[$term->parent]['children'][] = $term;
            } else {
                // 如果父分类未关联到当前文章,也单独作为父分类处理
                $parent_cats[$term->term_id] = array(
                    'term' => get_term($term->parent, $taxonomy),
                    'children' => array($term)
                );
            }
        }
    }

    // 循环输出每个父分类的结构
    foreach ($parent_cats as $parent) {
        if (empty($parent['term'])) continue;
        ?>
        <ul>
            <li class="parent_cat_title"><?php echo esc_html($parent['term']->name); ?></li>
            <?php foreach ($parent['children'] as $child) : ?>
                <li class="child_cat">
                    <a href="<?php echo esc_url(get_term_link($child)); ?>"><?php echo esc_html($child->name); ?></a>
                </li>
            <?php endforeach; ?>
        </ul>
        <?php
    }
}
?>

代码关键说明

  • 获取完整分类数据:修改wp_get_object_terms的fields参数为all,拿到分类的完整信息(包括父ID、名称、链接等),方便后续分组。
  • 分类分组逻辑:遍历所有分类,将顶级分类(parent=0)作为父分类容器,子分类归属到对应的父分类下;如果子分类的父分类未关联到当前文章,也自动获取父分类信息并创建分组。
  • 安全输出:使用esc_html()和esc_url()确保输出内容符合WordPress安全规范,避免XSS风险。
  • 结构渲染:循环每个父分类,输出对应的<ul>结构,父分类名称作为标题项,子分类生成带链接的列表项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:05:28