Группировка вывода вложенных полей репитера с использованием ACF - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь вывести свои вложенные поля повторителя ACF так, чтобы вывод был следующим:

Имя группы 1

Массив значений группы 1:

  • Имя донора
  • Название компании
  • URL-адрес фотографии

Название группы 2

Группа 2 Массив значений:

  • Имя донора
  • Название компании
  • URL-адрес фотографии

Пока у меня есть следующий код:

    $sponsor_group_names = array();
    $donor_names_list = array();
    $donor_company_names_list = array();
    $donor_photo_urls = array();

    $donors_group_list = array();
    if (have_rows('sponsor_group')):
        while ( have_rows('sponsor_group')) : the_row();
            $sponsor_group_name = get_sub_field('sponsorship_group_name');
            array_push($sponsor_group_names, $sponsor_group_name);
                if (have_rows('group_donors')):
                    while ( have_rows('group_donors')) : the_row();
                        $donors_group = get_field('group_donors');
                        array_push($donors_group_list, $donors_group);

                        $donor_name = get_sub_field('donor_name');
                        array_push($donor_names_list, $donor_name);
                        $donor_company_name = get_sub_field('donor_company_name');
                        array_push($donor_company_names_list, $donor_company_name);
                        $donor_photo = get_sub_field('donor_photo');
                        array_push($donor_photo_urls, $donor_photo);
                    endwhile;
                endif;
        endwhile;
    endif;

И я вывожу это следующим образом:

<?php foreach ($sponsor_group_names as $group): ?>
<h2 class="text-primary mb-3">{{$group}}</h2>
    <div class="row" style="margin-bottom: 0 !important">

    <?php
    $iterator = 0;
    foreach ($donor_names_list as $donor): ?>
        <div class="col-md-4 contact-card" style="min-width: 300px;">
            <div class="row" style="margin-bottom: 0 !important">
                <div class="col-lg col-6"><img src="{{$donor_photo_urls[$iterator]}}" class="donor-photo"></div> <!--https://via.placeholder.com/100-->
                <div class="col-lg col-6 donor-info"> <p>{{$donor}} </p> <p> {{$donor_company_names_list[$iterator]}} </p></div>
            </div>
        </div>

    <?php $iterator++;
endforeach; ?>

</div>
<?php endforeach; ?>

Этот вывод дает мне разные имена групп для 1 и 2, но выводит ту же информацию для названия компании, URL-адреса фотографии и имя донора. В идеале я хотел бы настроить свой код так, чтобы он использовал key=>value, как $donor_photo_urls['group 1'], но мои предыдущие попытки подражать тому, что я видел на форумах поддержки ACF, привели к выводу NULL.

В конечном итоге я хочу напечатать уникальные массивы для каждого имени группы. Цени любую помощь!

1 Ответ

2 голосов
/ 27 января 2020

Я предполагаю, что ваш ретранслятор настроен на group_donors как вложенный репитер в sponsor_group здесь. Использование функции get_field() на повторителе фактически возвращает ассоциативный массив со всеми подполями и любыми повторителями в них. https://www.advancedcustomfields.com/resources/get_field/

Таким образом, вы должны иметь возможность сделать что-то вроде следующего для вывода всех ваших групп и их вложенных доноров.

foreach (get_field('sponsor_group') as $sponsorGroup) : ?>
    <h2 class="text-primary mb-3"><?= $sponsorGroup['sponsorship_group_name'] ?></h2>
    <div class="row" style="margin-bottom: 0 !important">
        <?php foreach ($sponsorGroup['group_donors'] as $groupDonor) : ?>
            <div class="col-md-4 contact-card" style="min-width: 300px;">
                <div class="row" style="margin-bottom: 0 !important">
                    <div class="col-lg col-6"><img src="<?= $groupDonor['donor_photo'] ?>" class="donor-photo"></div>
                    <div class="col-lg col-6 donor-info">
                        <p><?= $groupDonor['donor_name'] ?></p>
                        <p><?= $groupDonor['donor_company_name'] ?></p>
                    </div>
                </div>
            </div>
        <?php endforeach ?>
    </div>
<?php endforeach;
...