ACF中继器内的foreach声明

时间:2017-11-25 12:12:32

标签: php arrays foreach repeater advanced-custom-fields

我不确定我是否正确地这样做了?我有一个嵌套的ACF转发器,它工作正常,但该部分都显示为一个单独的块。我希望能够将块分成列。所以我要做到这一点,我需要一个" foreach"声明所以我可以为每个部分分配一个id或类,让我能够单独设置每个部分的样式 - 浮动并添加边距等。

我无法让它发挥作用!

<div class="col-xl-12 food-section">


<?php
$rows = get_field('section_container');
if($rows) {
foreach($rows as $row):
?>

<div class="col-xl-6 section-test"> <?php
    if( have_rows('section_container') ) :  
    while( have_rows('section_container') ): the_row(); ?>

<h1><?php the_sub_field('section_heading'); ?></h1>
        <div class="section-image"><?php
            $image = get_sub_field('section_image');
            if( !empty($image) ): ?>
                <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />
        </div>

        <?php endif;

            if( have_rows('sub_section_container') ): 
            while( have_rows('sub_section_container') ): the_row();
            ?>
                <h2><?php the_sub_field('sub_section_heading'); ?></h2>
                <?php
                    if( have_rows('food_item') ): 
                    while( have_rows('food_item') ): the_row();
                ?>

<div id="menu-table">
    <h3 id="leftside"><?php the_sub_field('item_name'); ?></h3>
    <h4 id="rightside"><?php the_sub_field('price'); ?></h4>
    <div id="menu-description"><p><?php the_sub_field('item_description'); ?></p></div>
    <div class="stroke"></div>
</div>

                <?php   endwhile; //food_item
                    endif;  //food_item

            endwhile; //section_h1_container
            endif;  //section_h1_container

    endwhile; //section_container
    endif;  //section_container

    wp_reset_postdata();

    endforeach; }
?></div>

    </div><!-- food-section -->

1 个答案:

答案 0 :(得分:0)

我已经清理了你的代码,我希望我能理解你的要求。您在代码段的顶部有一个不必要的if和foreach,以及在ACF中的转发器调用结束时不需要的wp_reset_postdata()。

您可以在此处阅读有关嵌套转发器的更多信息:

https://www.advancedcustomfields.com/resources/working-with-nested-repeaters/

<?php if( have_rows('section_container') ) : ?>
 <div class="col-xl-12 food-section"> 
      <?php while( have_rows('section_container') ): the_row(); ?>
           <div class="col-xl-6 section-test">
                <h1><?php the_sub_field('section_heading'); ?></h1>
                <div class="section-image">
                     <?php $image = get_sub_field('section_image');
                     if( !empty($image) ): ?>
                          <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />
                     <?php endif; ?>
                </div>
                <?php if( have_rows('sub_section_container') ): 
                     while( have_rows('sub_section_container') ): the_row(); ?>
                          <h2><?php the_sub_field('sub_section_heading'); ?></h2>
                          <?php if( have_rows('food_item') ): 
                               while( have_rows('food_item') ): the_row(); ?>
                                    <div id="menu-table">
                                        <h3 id="leftside"><?php the_sub_field('item_name'); ?></h3>
                                        <h4 id="rightside"><?php the_sub_field('price'); ?></h4>
                                        <div id="menu-description"><p><?php the_sub_field('item_description'); ?></p></div>
                                        <div class="stroke"></div>
                                    </div>
                               <?php   endwhile; //food_item
                          endif;  //food_item
                     endwhile; //section_h1_container
                endif;  //section_h1_container ?>
           </div>
      <?php endwhile; //section_container ?>
 </div>
<?php endif;  //section_container ?>

此代码段检查是否为“section_container”设置了任何行,如果是,则创建“food-section”div。然后它遍历“section_container”的每一行。对于每一行,它创建一个“section-test”div,并开始用该行的子字段数据填充它。然后它检查当前行中的“sub_section_container”转发器,并遍历嵌套转发器内的行,并输出数据。