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

WordPress中ACF自定义分类筛选问题求助

问题分析与修复方案

你遇到的核心问题是每个分类下都显示了所有文章,这是因为WP_Query的tax_query格式错误导致分类筛选失效,同时代码里还有几个影响功能的细节问题,以下是修复后的完整方案:

关键错误点

  1. tax_query格式错误:必须是嵌套数组(外层数组包含内层条件数组),你当前写的一维数组无法被WP正确解析,导致分类筛选完全失效,返回了所有charging_faq类型文章。
  2. 折叠面板ID重复:所有分类的折叠容器都用id="faq",导致跨分类的折叠项互相干扰。
  3. Tab切换无对应容器:分类Tab的跳转链接没有匹配的内容容器ID,切换功能完全无效。
  4. 查询重置方式错误:使用WP_Query后应该用wp_reset_postdata(),而非wp_reset_query()。

修复后的完整代码

<?php
$section = get_query_var('section');
$sectionKey = get_query_var('section_key');
$categories = get_terms('charging_categories');
?>

<div id="section_<?php echo $sectionKey; ?>" class="section">
    <div class="d-md-block col-12 col-md-12 charging-station-faq">
        <div id="main">
            <div class="container">
                <div class="col-md-10 text-center">
                    <h2 class="white"><?php echo $fields['ch_faq_title']; ?></h2>
                    <p class="text-center"><?php echo $fields['ch_faq_sub_title']; ?></p>
                </div>
                <!-- 统一Tab导航容器(移到循环外,避免重复生成) -->
                <div class="buttons-row nav nav-tabs justify-content-center" id="myTab" role="tablist">
                    <?php foreach ($categories as $i => $category) { ?>
                        <a class="form_change_button nav-link <?php echo $i === 0 ? 'active' : ''; ?>" data-toggle="tab" href="#<?php echo esc_attr($category->slug); ?>" role="tab" aria-controls="<?php echo esc_attr($category->slug); ?>" aria-selected="<?php echo $i === 0 ? 'true' : 'false'; ?>">
                            <?php echo esc_html($category->name); ?>
                        </a>
                    <?php } ?>
                </div>
                <!-- Tab内容容器 -->
                <div class="tab-content" id="myTabContent">
                    <?php foreach ($categories as $i => $category) { ?>
                        <div class="tab-pane fade <?php echo $i === 0 ? 'show active' : ''; ?>" id="<?php echo esc_attr($category->slug); ?>" role="tabpanel" aria-labelledby="<?php echo esc_attr($category->slug); ?>-tab">
                            <?php
                            $args = array(
                                'post_type' => 'charging_faq',
                                'tax_query' => array(
                                    // 修正:tax_query必须为嵌套数组
                                    array(
                                        'taxonomy' => 'charging_categories',
                                        'field' => 'slug',
                                        'terms' => $category->slug,
                                        'include_children' => false, // 可选:是否包含子分类文章,按需调整
                                    )
                                ),
                            );
                            $posts = new WP_Query($args);
                            ?>
                            <?php if ($posts->have_posts()) { ?>
                                <!-- 每个分类的折叠容器使用唯一ID -->
                                <div class="accordion" id="faq-<?php echo esc_attr($category->slug); ?>">
                                    <?php while ($posts->have_posts()) : $posts->the_post(); ?>
                                        <div class="card" style="background-color: transparent;">
                                            <div class="card-header" id="faqhead-<?php echo get_the_ID(); ?>">
                                                <button href="#question-<?php echo get_the_ID(); ?>" class="btn btn-link" data-toggle="collapse" data-target="#question-<?php echo get_the_ID(); ?>" role="button" aria-expanded="true" aria-controls="question-<?php echo get_the_ID(); ?>">
                                                    <?php the_title(); ?>
                                                </button>
                                            </div>
                                            <div id="question-<?php echo get_the_ID(); ?>" class="collapse" aria-labelledby="faqhead-<?php echo get_the_ID(); ?>" data-parent="#faq-<?php echo esc_attr($category->slug); ?>">
                                                <div class="card-body">
                                                    <?php the_content(); ?>
                                                </div>
                                            </div>
                                        </div>
                                    <?php endwhile; ?>
                                </div>
                                <?php wp_reset_postdata(); // 修正:用正确的方式重置查询 ?>
                            <?php } ?>
                        </div>
                    <?php } ?>
                </div>
            </div>
        </div>
    </div>
</div>

额外优化说明

  1. 将Tab导航移到分类循环外,符合Bootstrap标准Tab结构,避免重复生成导航栏。
  2. 给第一个Tab和内容容器添加active类,默认显示第一个分类内容。
  3. 使用esc_attr()和esc_html()转义输出内容,避免XSS安全风险。
  4. 折叠面板的ID和关联属性改为文章ID+分类Slug的组合,确保全局唯一性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:46:09