WordPress 中的高级自定义字段 - 无法在组内使用转发器

Posted

技术标签:

【中文标题】WordPress 中的高级自定义字段 - 无法在组内使用转发器【英文标题】:Advanced Custom Fields within WordPress - Unable to use a repeater within a group 【发布时间】:2020-11-05 05:00:09 【问题描述】:

我之前已经这样做了 20 多次,但我无法弄清楚为什么我对中继器字段的调用会破坏我的网站。

由于 php 错误,页面无法加载,如果我删除调用中继器字段的 while 循环,它可以工作。

我想知道我在这个 sn-p 中做错了什么:

~转发器字段称为application_sectors,可能是开始寻找修复的好地方!

<?php
$has_applications_of_ebflow = get_field('has_applications_of_ebflow');
?>

<?php if ( $has_applications_of_ebflow === TRUE ): ?>

    <div class="applications-of-ebflow">

        <div class="applications-of-ebflow-inner">

            <?php
            $applications_of_ebflow = get_field('applications_of_ebflow');
            while ( have_rows('applications_of_ebflow') ): the_row();
                $heading = get_sub_field('heading');
                $application_sectors = get_sub_field('application_sectors');
                $enquiry_link = get_sub_field('enquiry_link');
            ?>

                <?php if ( $heading != '' ): ?><h2 class="aoe-heading"><?php echo $heading; ?></h2><?php endif; ?>

                <?php if ( $application_sectors != '') : ?>

                    <div class="aoe-application-sectors">

                        <?php
                        while ( have_rows('application_sectors') ): the_row();
                            $image = get_sub_field('image');
                            $heading = get_sub_field('heading');
                            $sector_applications = get_sub_field('sector_applications');
                        ?>

                            <div class="aoe-application-sector">

                                <?php if ( $image != '' ): ?>

                                    <div class="aoe-application-sector-image-contain">

                                        <img class="aoe-application-sector-image"  src="<?php echo $image; ?>">

                                    </div>

                                <?php endif; ?>

                                <div class="aoe-application-sector-content">

                                    <?php if ( $heading != '' ): ?>

                                        <h3 class="aoe-sector-heading"><?php echo $heading; ?></h3>

                                    <?php endif; ?>

                                    <?php if ( $sector_applications != '' ): ?>

                                        <div class="sector-applications">

                                            <?php
                                            while ( have_rows('application_sectors') ): the_row();
                                                $application = get_sub_field('application');
                                            ?>

                                                <div class="sector-application">

                                                    <?php echo $application; ?>

                                                </div>

                                            <?php endwhile; ?>

                                        </div>

                                    <?php endif; ?>

                                </div>

                            </div>

                        <?php endwhile; ?>

                    </div>

                <?php endif; ?>

                <?php if ( $enquiry_link != '' ): ?>

                    <div class="aoe-enquiry">
                        <a href="<?php echo $enquiry_link; ?>" class="box-link"></a>
                        <div class="enquiry-text">Enquire about your application</div>
                    </div>

                <?php endif; ?>

            <?php endwhile; ?>

        </div>

    </div>

<?php endif; ?>

我还可以附上我的 ACF 的屏幕截图:

我很确定我错误地调用了我的中继器字段,但不记得我以前是如何解决这种情况的。

【问题讨论】:

“由于 php 错误导致页面无法加载”,错误是什么? 错误 500 - 我想我可能不得不在迭代 while 时使用 'the_sub_field' 而不是 'get_the_field',这对你来说是否正确。 打开调试模式从服务器获取真正的错误信息。 【参考方案1】:

不是这个

<?php
$sector_applications = get_sub_field('sector_applications');
?>

使用这个

while ( have_rows('sector_applications') ): the_row();

然后调用您的 sub_fields。它是中继器中的中继器。就像 foreach 中的 foreach 循环一样。您将其称为字段,但实际上有行。

have_rows() – allows us to loop through the available rows in a repeater / flexible content field
get_sub_field() – returns the value of a sub field (from the current repeater in “has_sub_field”)
the_sub_field() – displays the value of a sub field (from the current repeater in “has_sub_field”)

更多信息和一个很好的例子可以在ACF | Working with Nested Repeaters找到

我认为问题出在这里,我已经修改了你的部分代码

<?php
while ( have_rows('application_sectors') ): the_row();
$image = get_sub_field('image');
$heading = get_sub_field('heading');

while ( have_rows('sector_applications') ): the_row();
?>

你的结构是这样的: 中继器

sub_fields(又名 get_field)

但你不会进入另一个中继器......

在我的例子中你有

中继器

sub_fields(又名 get_field) 中继器内中继器 然后您可以再次从中继器的这一部分中获取 sub_fields

【讨论】:

真的很感谢帮助,我觉得很愚蠢,但我已经在使用你说要使用的线路了。请问您可以操作我提供的代码块,以便我可以看到您会在哪里使用它吗? @JasonIsMyName 修改了我的答案 欣赏你的兄弟!干得好c: 我之前至少做过 20 次,从来没有遇到过问题。这一次,即使在阅读了文档之后,我也看不出我哪里出错了!再次感谢!

以上是关于WordPress 中的高级自定义字段 - 无法在组内使用转发器的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 和高级自定义字段管理,仪表板中的自定义列

php 将重力表单文件上载到高级自定义字段WordPress中的图像/文件字段

使用 wordpress 中的高级自定义字段格式化日期输出

Wordpress:高级自定义字段:将字段导出和导入到新的 wordpress 安装

高级自定义字段 -wordpress+ 转发器

在 Wordpress 中使用 ACF(高级自定义字段)显示自定义帖子标题的下拉菜单