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

ACF自定义Image Slider块无法获取auto_play字段值求助

解决ACF自定义块中无法获取字段值的问题

核心问题诊断

你在have_rows('slide_setting')循环内部调用get_field('auto_play')返回null,是因为ACF的字段上下文已经切换到slide_setting这个repeater字段内部,无法访问上层(Image Slider块)的字段。

解决方案

方案1:提前获取块级字段(推荐)

将auto_play等块级字段的获取逻辑移到have_rows('slide_setting')之前,此时ACF的上下文仍停留在当前Image Slider块中,能直接读取字段值:

<?php
// 先获取当前块的字段,上下文正确
$auto_play = get_field('auto_play');
$auto_play_delay = get_field('auto_play_delay');
$auto_play_disable = get_field('auto_play_disable_on_interaction');

if(have_rows( 'slide_setting' ) ) {
    $digits = 3;
    $randID = rand(pow(10, $digits-1), pow(10, $digits)-1);
    echo '<div class="container"><div class="row"><div id="swiper_'.$randID.'" class="col-md-12 wiche-swiper-top-navigation-wrapper">';
    echo '<div class="swiper-container wiche-swiper-top-navigation">';

        if ( $auto_play ) {
            echo '<div class="swiper-wrapper" data-swiper-autoplay="' . $auto_play_delay . '" data-swiper-disable-on-interaction="' . $auto_play_disable . '">';
        } else {
            echo '<div class="swiper-wrapper">';
        }

        while( have_rows( 'slide_setting' ) ) {
            the_row();
            $title = get_sub_field( 'title' );
            $image = get_sub_field( 'image' );
            $content = get_sub_field( 'content' );

            if ( $image || $content ) {
                echo '<div class="swiper-slide swiper-banner-slide swiper-no-swiping">';
                    if ( $title ) {
                        echo '<div class="text-center slider-top-title">';
                            echo $title;
                        echo '</div>';
                    }
                    if ( $image ) {
                        echo '<div class="banner-image">';
                            echo wp_get_attachment_image( $image, 'full', '', array( 'loading' => false ) );
                        echo '</div>';
                    }

                    if ( $content ) {
                    echo '<div class="banner-content">';
                        echo $content;
                    echo '</div>';
                    }
                echo '</div>';
            }
        }
        echo '</div>';
    echo '</div>';
    echo '<div class="swiper-button-next swiper-button-next-outsite">Next</div><div class="swiper-button-prev swiper-button-prev-outsite">Prev</div>';
    echo '</div></div></div>';
}

方案2:手动定位page_builder索引

如果需要主动获取当前块在page_builder中的索引,可以用get_row_index()(前提是该模板在page_builder的have_rows循环中加载),再通过全局字段数组定位:

<?php
// 获取当前块在page_builder中的索引(get_row_index返回1开始的序号,转成0开始的数组索引)
$current_block_index = get_row_index() - 1;
// 从全局字段中取出当前块的所有字段
$current_block_fields = get_fields(get_the_ID())['page_builder'][$current_block_index];

// 提取需要的字段
$auto_play = $current_block_fields['auto_play'];
$auto_play_delay = $current_block_fields['auto_play_delay'];
$auto_play_disable = $current_block_fields['auto_play_disable_on_interaction'];

// 后续逻辑同方案1
if(have_rows( 'slide_setting' ) ) {
    // 原有渲染逻辑
}

补充说明

  • ACF的字段上下文会随have_rows/the_row自动切换,进入repeater循环后,只能访问该repeater的子字段,上层字段需提前获取或手动定位。
  • 方案1更符合ACF的设计逻辑,能避免page_builder块顺序变化导致的索引失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:21:25