首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[分享]WordPress如何输出多层级分类?

发布于 2024-11-05 15:54:57
0
185

在 WordPress 中输出多层级分类(嵌套的分类)可以通过以下方法实现,这些方法包括使用自带的函数、直接查询数据库,以及使用自定义的代码来递归输出嵌套分类。1. 使用 wp_list_catego...

在 WordPress 中输出多层级分类(嵌套的分类)可以通过以下方法实现,这些方法包括使用自带的函数、直接查询数据库,以及使用自定义的代码来递归输出嵌套分类。

1. 使用 wp_list_categories

wp_list_categories 函数可以方便地输出分类列表,并支持多层级嵌套显示。

示例代码:

<ul>
<?php
wp_list_categories([
    'orderby' => 'name',
    'show_count' => true,
    'hierarchical' => true,
    'title_li' => '', // 如果需要标题,可以填写标题名称
]);
?>
</ul>

关键参数:

orderby:定义分类排序方式,'name' 按名称排序。
show_count:是否显示每个分类中的文章数量,true 为显示。
hierarchical:是否显示层级结构,true 为显示嵌套分类。
title_li:列表标题,如果不需要标题,可以设置为空字符串。

2. 使用 get_categories 和递归函数

如果你需要更多自定义输出,可以使用 get_categories 函数获取分类,然后使用递归函数生成嵌套列表。

示例代码:

<?php
function display_categories($parent = 0, $level = 0) {
    $args = [
        'parent' => $parent,
        'hide_empty' => false,
    ];
    $categories = get_categories($args);
    if ($categories) {
        echo '<ul>';
        foreach ($categories as $category) {
            echo '<li>';
            echo '<a href="' . get_category_link($category->term_id) . '">' . $category->name . '</a>';
            display_categories($category->term_id, $level + 1);
            echo '</li>';
        }
        echo '</ul>';
    }
}

// 在模板中调用该函数
display_categories();
?>

关键部分:

get_categories:获取指定父分类下的子分类。
display_categories:递归函数,通过 parent 参数逐级获取子分类。

3. 使用 wp_nav_menu 生成分类菜单

如果你将分类注册为导航菜单,wp_nav_menu 可以方便地生成多层级的分类菜单。

示例代码:

<?php
wp_nav_menu([
    'theme_location' => 'category_menu',
    'menu_class' => 'category-menu',
    'depth' => 0, // 0 表示不限制层级深度
]);
?>

关键步骤:

在 WordPress 后台创建并注册一个自定义菜单。
将分类项添加到菜单中。
使用 wp_nav_menu 输出菜单。

4. 直接查询数据库

在特殊情况下,你可能需要直接查询数据库以获取多层级分类信息。

示例代码:

<?php
global $wpdb;

$query = "
    SELECT t.*, tt.*
    FROM {$wpdb->terms} AS t
    INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
    WHERE tt.taxonomy = 'category'
    ORDER BY t.name ASC
";

$categories = $wpdb->get_results($query);

function display_nested_categories($categories, $parent = 0, $level = 0) {
    echo '<ul>';
    foreach ($categories as $category) {
        if ($category->parent == $parent) {
            echo '<li>';
            echo '<a href="' . get_category_link($category->term_id) . '">' . $category->name . '</a>';
            display_nested_categories($categories, $category->term_id, $level + 1);
            echo '</li>';
        }
    }
    echo '</ul>';
}

display_nested_categories($categories);
?>

总结
这些方法提供了从简单到复杂的不同方式来实现多层级分类的输出。根据具体需求,你可以选择最适合的方案:

简单的分类列表:使用 wp_list_categories。
自定义输出:使用 get_categories 和递归函数。
菜单结构输出:使用 wp_nav_menu。
自定义查询:直接查询数据库。
根据你的使用场景和需求,可以进行适当的调整和扩展。

评论
一个月内的热帖推荐
鸟云
Lv.1普通用户

275

帖子

20

小组

225

积分

赞助商广告
站长交流