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

如何在PHP中借助ACF为Bootstrap轮播首个元素添加active类

解决ACF重复字段生成Bootstrap轮播时首个item添加active类的问题

Bootstrap轮播要求.carousel-inner下的第一个.carousel-item必须添加active类才能正常工作,以下是两种实现方案:

PHP实现(推荐)

直接在后端渲染时给第一个轮播项添加active类,无需依赖前端JS,兼容性和性能更好。

方法1:使用计数器变量

初始化一个计数器,循环时判断是否为第一个元素:

<?php if( have_rows('text_block_repeater') ): ?>
   <div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
       <div class="carousel-inner">
           <?php 
           $item_count = 0;
           while( have_rows('double_image') ): the_row(); 
           // 给第一个轮播项添加active类
           $carousel_class = $item_count === 0 ? 'carousel-item active' : 'carousel-item';
           ?>
           <div class="<?php echo esc_attr($carousel_class); ?>">
               <?php $image = get_sub_field('image'); if( !empty( $image ) ): ?>
                    <img class="w-100" src="<?php echo esc_url($image['url']); ?>" alt="<?php echo esc_attr($image['alt']); ?>" />
               <?php endif; ?>
           </div>
           <?php 
           $item_count++;
           endwhile; ?>
       </div>
        <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="sr-only">Previous</span>
        </a>
        <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="sr-only">Next</span>
        </a>
   </div>
<?php endif; ?>

方法2:使用ACF自带的get_row_index()函数

ACF的get_row_index()会返回当前重复字段的行索引(从1开始),直接判断是否为第一行即可:

<?php if( have_rows('text_block_repeater') ): ?>
   <div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
       <div class="carousel-inner">
           <?php while( have_rows('double_image') ): the_row(); 
           // 第一行添加active类
           $carousel_class = get_row_index() === 1 ? 'carousel-item active' : 'carousel-item';
           ?>
           <div class="<?php echo esc_attr($carousel_class); ?>">
               <?php $image = get_sub_field('image'); if( !empty( $image ) ): ?>
                    <img class="w-100" src="<?php echo esc_url($image['url']); ?>" alt="<?php echo esc_attr($image['alt']); ?>" />
               <?php endif; ?>
           </div>
           <?php endwhile; ?>
       </div>
        <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="sr-only">Previous</span>
        </a>
        <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="sr-only">Next</span>
        </a>
   </div>
<?php endif; ?>

JavaScript实现

如果无法修改PHP代码,可以用前端JS给第一个轮播项添加active类:

原生JS版本

document.addEventListener('DOMContentLoaded', function() {
    const firstItem = document.querySelector('#carouselExampleControls .carousel-item:first-child');
    if (firstItem) {
        firstItem.classList.add('active');
    }
});

jQuery版本(项目已引入jQuery时使用)

$(document).ready(function() {
    $('#carouselExampleControls .carousel-item:first').addClass('active');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:33:25