Не работает проверка в WP if (have_rows('block_name')): ?

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

Добрый день!
В шаблоне WP прописан код вывода блока из ACF.
Если блок не заполненный, то ничего не выводит.
Если заполнить заголовок в блоке, т.е. даные в нём есть, но вывода нет.

Не работает проверка в WP if (have_rows('block_name')): ?

Не работает проверка в WP if (have_rows('block_name')): ?

Не работает проверка в WP if (have_rows('block_name')): ?

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

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

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

Заказать помощь
Лучший ответ
1
Артём Dev Ответ

have_rows('block_name') работает только для поля типа Repeater/Flexible Content/Group с повторяемыми строками. Если в ACF заполнен обычный заголовок внутри группы или простое текстовое поле, have_rows() может вернуть false, потому что «строк» там нет. Для обычных полей используйте get_field() или get_sub_field() внутри правильного контекста.

Если block_name — группа ACF:

$block = get_field('block_name');
 
if (! empty($block['title'])) : ?>
    <section class="my-block">
        <h2><?php echo esc_html($block['title']); ?></h2>
    </section>
<?php endif; ?>

$block = get_field('block_name'); if (! empty($block['title'])) : ?> <section class="my-block"> <h2><?php echo esc_html($block['title']); ?></h2> </section> <?php endif; ?>

Если block_name — repeater:

<?php if (have_rows('block_name')) : ?>
    <div class="my-block">
        <?php while (have_rows('block_name')) : the_row(); ?>
            <h3><?php echo esc_html(get_sub_field('title')); ?></h3>
        <?php endwhile; ?>
    </div>
<?php endif; ?>

<?php if (have_rows('block_name')) : ?> <div class="my-block"> <?php while (have_rows('block_name')) : the_row(); ?> <h3><?php echo esc_html(get_sub_field('title')); ?></h3> <?php endwhile; ?> </div> <?php endif; ?>

Ещё частая причина — поле привязано не к текущему посту. Тогда укажите ID явно:

$block = get_field('block_name', get_the_ID());

$block = get_field('block_name', get_the_ID());

Проверьте точное имя поля, тип поля и место вывода шаблона. В ACF label и name — разные вещи; в коде нужен именно field name, а не русское название поля.

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

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

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

комментарий

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

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