Как вывести в повторителе повторителя тип поля таксономия ACF?

Ссылка скопирована
PHP
1 ответ

Есть поле повторитель 1, в нем есть еще один повторитель 2, внутри которого есть поле таксономия

Как вывести в повторителе повторителя тип поля таксономия ACF?

пытаюсь вывести во втором повторителе ссылку и миниатюру, но ничего не выводится, что я сделал не так?

<?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; ?>

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Дмитрий К. Ответ

В 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; ?>

<?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' );
}

$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 );

$term_id = get_sub_field( 'taksonomiya' ); $term = get_term( $term_id );

Если разрешён множественный выбор терминов, get_sub_field() вернёт массив. Тогда нужен дополнительный foreach по терминам. Поэтому сначала сделайте временный вывод var_dump( get_sub_field( 'taksonomiya' ) ); на локалке или в шаблоне разработки и подстройте код под фактический формат.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно