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

如何在WordPress中构建多Wiki分类树结构?

多Wiki系统实现方案(WordPress)

核心结构搭建

先注册一个主自定义文章类型,搭配层级分类法来区分不同独立Wiki:

1. 注册自定义文章类型与分类法

在主题functions.php或自定义插件中添加以下代码:

// 注册自定义文章类型:Wiki文章
function register_wiki_article_cpt() {
    $args = array(
        'label' => 'Wiki文章',
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'wiki'),
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'tags'),
        'show_in_rest' => true,
    );
    register_post_type('wiki_article', $args);
}
add_action('init', 'register_wiki_article_cpt');

// 注册层级分类法:Wiki集合(区分不同独立Wiki)
function register_wiki_collection_tax() {
    $args = array(
        'label' => 'Wiki集合',
        'hierarchical' => true,
        'public' => true,
        'rewrite' => array('slug' => 'wiki-collection'),
        'show_in_rest' => true,
    );
    register_taxonomy('wiki_collection', 'wiki_article', $args);
}
add_action('init', 'register_wiki_collection_tax');

这里wiki_collection设为层级结构,你可以创建顶级分类(如"产品文档Wiki"、"技术知识库"),每个顶级分类对应一个独立Wiki,还能添加子分类细化内容层级。

实现标签的Wiki隔离

要让每个Wiki的标签独立显示、互不干扰,需要过滤标签的查询逻辑:

1. 前端仅显示当前Wiki的标签云

自定义标签云函数,只加载指定Wiki下的标签:

// 自定义Wiki标签云函数
function wiki_tag_cloud($wiki_collection_id) {
    $post_ids = get_posts(array(
        'post_type' => 'wiki_article',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'wiki_collection',
                'field' => 'term_id',
                'terms' => $wiki_collection_id,
            )
        ),
        'fields' => 'ids',
    ));

    $tags = get_terms(array(
        'taxonomy' => 'post_tag',
        'object_ids' => $post_ids,
        'hide_empty' => true,
    ));

    if (!empty($tags)) {
        $tag_cloud = wp_tag_cloud(array(
            'taxonomy' => 'post_tag',
            'include' => wp_list_pluck($tags, 'term_id'),
            'echo' => false,
        ));
        echo $tag_cloud;
    }
}

在对应Wiki的模板页面中,调用wiki_tag_cloud($current_wiki_term_id)即可,$current_wiki_term_id为当前Wiki分类的ID。

2. 后台编辑页自动过滤标签

添加AJAX和JS逻辑,选择Wiki分类后自动加载对应标签:

// AJAX获取指定Wiki的标签
function get_wiki_tags() {
    $wiki_id = intval($_POST['wiki_id']);
    $post_ids = get_posts(array(
        'post_type' => 'wiki_article',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'wiki_collection',
                'field' => 'term_id',
                'terms' => $wiki_id,
            )
        ),
        'fields' => 'ids',
    ));

    $tags = get_terms(array(
        'taxonomy' => 'post_tag',
        'object_ids' => $post_ids,
        'hide_empty' => false,
    ));

    wp_send_json($tags);
}
add_action('wp_ajax_get_wiki_tags', 'get_wiki_tags');

// 后台加载JS
function wiki_admin_enqueue_scripts() {
    global $pagenow;
    if (($pagenow === 'post.php' || $pagenow === 'post-new.php') && get_post_type() === 'wiki_article') {
        wp_enqueue_script('wiki-admin-js', get_template_directory_uri() . '/js/wiki-admin.js', array('jquery'), '1.0', true);
        wp_localize_script('wiki-admin-js', 'wikiAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
    }
}
add_action('admin_enqueue_scripts', 'wiki_admin_enqueue_scripts');

在主题js/wiki-admin.js中添加监听逻辑:

jQuery(document).ready(function($) {
    // 监听Wiki分类选择变化
    $('#wiki_collectionchecklist input').on('change', function() {
        var selectedWikiId = $('#wiki_collectionchecklist input:checked').val();
        if (selectedWikiId) {
            $.post(wikiAjax.ajaxurl, {
                action: 'get_wiki_tags',
                wiki_id: selectedWikiId
            }, function(response) {
                $('#post_tagchecklist').empty();
                $.each(response, function(index, tag) {
                    var html = '<li id="post_tag-' + tag.term_id + '"><label class="selectit"><input value="' + tag.term_id + '" type="checkbox" name="tax_input[post_tag][]" id="in-post_tag-' + tag.term_id + '"> ' + tag.name + '</label></li>';
                    $('#post_tagchecklist').append(html);
                });
            });
        }
    });
});

独立功能实现

1. 独立文章列表

创建模板文件taxonomy-wiki_collection.php,用于显示单个Wiki下的文章列表:

<?php get_header(); ?>
<div class="wiki-content">
    <h1><?php single_term_title(); ?></h1>
    <?php if (have_posts()) : ?>
        <ul class="wiki-article-list">
            <?php while (have_posts()) : the_post(); ?>
                <li>
                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                    <p><?php the_excerpt(); ?></p>
                </li>
            <?php endwhile; ?>
        </ul>
        <?php the_posts_navigation(); ?>
    <?php else : ?>
        <p>暂无文章</p>
    <?php endif; ?>
</div>
<?php get_footer(); ?>

2. 热门内容

安装Post Views Counter插件后,在模板中添加代码筛选当前Wiki的热门文章:

$popular_posts = new WP_Query(array(
    'post_type' => 'wiki_article',
    'posts_per_page' => 5,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'tax_query' => array(
        array(
            'taxonomy' => 'wiki_collection',
            'field' => 'term_id',
            'terms' => get_queried_object_id(),
        )
    )
));

if ($popular_posts->have_posts()) : ?>
    <h3>热门文章</h3>
    <ul>
        <?php while ($popular_posts->have_posts()) : $popular_posts->the_post(); ?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?> (<?php echo get_post_meta(get_the_ID(), 'post_views_count', true); ?> 次浏览)</a></li>
        <?php endwhile; ?>
    </ul>
<?php wp_reset_postdata(); endif; ?>

3. 独立搜索

添加代码让搜索仅针对当前Wiki(若在Wiki页面):

function wiki_search_filter($query) {
    if ($query->is_search && !is_admin()) {
        $query->set('post_type', 'wiki_article');
        
        if (is_tax('wiki_collection')) {
            $wiki_term = get_queried_object();
            $query->set('tax_query', array(
                array(
                    'taxonomy' => 'wiki_collection',
                    'field' => 'term_id',
                    'terms' => $wiki_term->term_id,
                )
            ));
        }
    }
    return $query;
}
add_filter('pre_get_posts', 'wiki_search_filter');

后台优化

在文章列表添加Wiki分类筛选器,方便快速筛选:

function wiki_collection_filter() {
    global $typenow;
    if ($typenow === 'wiki_article') {
        $taxonomy = 'wiki_collection';
        $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
        $terms = get_terms($taxonomy);
        if (count($terms) > 0) {
            echo "<select name='$taxonomy' id='$taxonomy' class='postform'>";
            echo '<option value="">所有Wiki</option>';
            foreach ($terms as $term) {
                echo '<option value=' . $term->slug, $selected == $term->slug ? ' selected="selected"' : '', '>' . $term->name . ' (' . $term->count . ')</option>';
            }
            echo "</select>";
        }
    }
}
add_action('restrict_manage_posts', 'wiki_collection_filter');

这个方案基于原生自定义文章类型+分类法实现,无需大量ACF字段或独立用户,维护成本低且扩展性强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:20:43