Как вывести в повторителе повторителя тип поля таксономия ACF?
Есть поле повторитель 1, в нем есть еще один повторитель 2, внутри которого есть поле таксономия
пытаюсь вывести во втором повторителе ссылку и миниатюру, но ничего не выводится, что я сделал не так?
<?php if( have_rows('povtoritel_1') ): ?> <?php while ( have_rows('povtoritel_1') ) : the_row(); ?> // ... <?php if (have_rows('povtoritel_2')) : ?> <ul> <?php while (have_rows('povtoritel_2')) : the_row(); $cat = get_sub_field('taksonomiya'); ?> <li class="product-category product"> <a href="<?php echo esc_url( get_term_link( $cat ) ); ?>"> <?php echo get_the_post_thumbnail($cat ); ?> </a> </li> <?php endwhile; ?> </ul> <?php endif; ?> <?php endwhile; ?> <?php endif; ?> |
<?php if( have_rows('povtoritel_1') ): ?> <?php while ( have_rows('povtoritel_1') ) : the_row(); ?> // ... <?php if (have_rows('povtoritel_2')) : ?> <ul> <?php while (have_rows('povtoritel_2')) : the_row(); $cat = get_sub_field('taksonomiya'); ?> <li class="product-category product"> <a href="<?php echo esc_url( get_term_link( $cat ) ); ?>"> <?php echo get_the_post_thumbnail($cat ); ?> </a> </li> <?php endwhile; ?> </ul> <?php endif; ?> <?php endwhile; ?> <?php endif; ?>
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

В ACF поле «Таксономия» может возвращать разные типы данных: объект термина, ID термина или массив. Поэтому код нужно писать под реальный формат возврата поля. В настройках поля ACF проверьте Return Value: Term Object, Term ID или Term Array.
Если поле возвращает объект термина, ссылка выводится так:
<?php if ( have_rows( 'povtoritel_1' ) ) : ?> <?php while ( have_rows( 'povtoritel_1' ) ) : the_row(); ?> <?php if ( have_rows( 'povtoritel_2' ) ) : ?> <ul> <?php while ( have_rows( 'povtoritel_2' ) ) : the_row(); ?> <?php $term = get_sub_field( 'taksonomiya' ); if ( ! $term instanceof WP_Term ) { continue; } $link = get_term_link( $term ); if ( is_wp_error( $link ) ) { continue; } ?> <li class="product-category product"> <a href="<?php echo esc_url( $link ); ?>"> <?php echo esc_html( $term->name ); ?> </a> </li> <?php endwhile; ?> </ul> <?php endif; ?> <?php endwhile; ?> <?php endif; ?>
Ошибка в вашем примере в том, что
get_the_post_thumbnail()работает с ID записи, а не с термином таксономии. У категории/термина нет «миниатюры записи» по умолчанию. Если картинка термина сделана через ACF, её нужно получать как поле термина:$image = get_field( 'image', $term ); if ( $image ) { echo wp_get_attachment_image( $image['ID'], 'thumbnail' ); }
Если поле таксономии возвращает ID, сначала получите термин:
$term_id = get_sub_field( 'taksonomiya' ); $term = get_term( $term_id );
Если разрешён множественный выбор терминов,
get_sub_field()вернёт массив. Тогда нужен дополнительныйforeachпо терминам. Поэтому сначала сделайте временный выводvar_dump( get_sub_field( 'taksonomiya' ) );на локалке или в шаблоне разработки и подстройте код под фактический формат.