Записи в повторитель?
Друзья, возникла проблема, создал повторитель в нём находится acf поле с типом записи. Пример кода будет ниже.
Когда я использую повторитель, то я использую the_sub_field чтобы вывести вложенные поля. Но как мне сделать это если там внутри поле с типом записи и если я вставляю вместо get_field('block-serv-pov') ставлю the_sub_field('block-serv-pov') то у меня крашится сайт. Как можно решить эту проблему
<?php if (get_field('show-uslug-1')) : ?> <div class="services-sect bg-color_gray"> <div class="services-sect__container"> <?php while (have_rows('block-name-uslug')) : the_row(); ?> <h2 class="services-sect__title section-title"><?php the_sub_field('block-name-title'); ?></h2> <?php $query = new WP_Query( array( 'post_type' => 'page', 'posts_per_page' => -1, 'post__in' => get_field('block-serv-pov') ) ); if ($query->have_posts()) : ?> <?php endif; wp_reset_query(); ?> <?php endwhile; ?> </div> </div> <?php endif; ?> |
<?php if (get_field('show-uslug-1')) : ?> <div class="services-sect bg-color_gray"> <div class="services-sect__container"> <?php while (have_rows('block-name-uslug')) : the_row(); ?> <h2 class="services-sect__title section-title"><?php the_sub_field('block-name-title'); ?></h2> <?php $query = new WP_Query( array( 'post_type' => 'page', 'posts_per_page' => -1, 'post__in' => get_field('block-serv-pov') ) ); if ($query->have_posts()) : ?> <?php endif; wp_reset_query(); ?> <?php endwhile; ?> </div> </div> <?php endif; ?>
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если вопрос про “записи в повторитель”, то обычно речь о том, как вывести несколько записей WordPress внутри repeater-поля ACF/Carbon Fields или как хранить выбранные записи в повторителе. Рабочий вариант зависит от того, что именно Вы хотите получить: список связанных записей, карточки услуг, блоки FAQ или произвольные элементы.
Для ACF правильнее не хранить ID записей текстом. Используйте поле Post Object или Relationship внутри repeater. Тогда редактор сможет выбрать запись из админки, а в шаблоне Вы получите объект или ID.
Пример для ACF repeater:
if (have_rows('related_items')) { echo '<div class="related-items">'; while (have_rows('related_items')) { the_row(); $post = get_sub_field('post'); if (!$post) { continue; } $post_id = is_object($post) ? $post->ID : (int) $post; echo '<a class="related-card" href="' . esc_url(get_permalink($post_id)) . '">'; echo esc_html(get_the_title($post_id)); echo '</a>'; } echo '</div>'; }
Если нужно вывести последние записи внутри повторителя, то повторитель вообще не нужен. Делайте обычный
WP_Query:$q = new WP_Query([ 'post_type' => 'post', 'posts_per_page' => 6, ]); while ($q->have_posts()) { $q->the_post(); get_template_part('template-parts/card'); } wp_reset_postdata();
Повторитель нужен, когда порядок и состав задаёт редактор вручную. Автоматический список записей лучше получать запросом. Иначе редактору придётся постоянно руками обновлять блок.
Если используете Carbon Fields, аналог — complex field с association внутри:
Field::make('complex', 'related_blocks', 'Связанные материалы') ->add_fields([ Field::make('association', 'post', 'Запись') ->set_types([ ['type' => 'post', 'post_type' => 'post'], ]), ]);
Итог: для ручного выбора записей используйте Relationship/Post Object внутри повторителя. Для автоматического вывода не нужен повторитель — используйте
WP_Query.