Как прописать условие при котором блок показываться не будет?
как прописать условие, при котором в случае отсутствия контента, блок ( весь section) показываться не будет.
Сейчас код выглядит так:
<section class="questions"> <div class="container"> <div class="questions__container"> <h2 class="questions__title ">Часто задаваемые вопросы</h2> <ul class="questions__list list accordion-list list flex "> <?php if (have_rows('faq')) : while (have_rows('faq')) : the_row(); ?> <li class="questions__item accordion "> <button class=" accordion__control btn-reset "> <span class="questions__item-title"><?php the_sub_field('vopros'); ?></span> <svg class="questions__item-icon" width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <ellipse cx="25" cy="25" rx="25" ry="25" fill="#ECECEC" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M25.0571 24.0571L25.0571 9L25.9429 9L25.9429 24.0571L33.8835 24.0571L41 24.0571L41 24.9429L25.9429 24.9429L25.9429 40L25.0571 40L25.0571 24.9429L10 24.9429L10 24.0571L25.0571 24.0571Z" fill="#666666" /> </svg> </button> <div class="accordion__content"><?php the_sub_field('otvet'); ?></div> </li> <?php endwhile; endif; ?> </ul> </div> </div> </section> |
<section class="questions"> <div class="container"> <div class="questions__container"> <h2 class="questions__title ">Часто задаваемые вопросы</h2> <ul class="questions__list list accordion-list list flex "> <?php if (have_rows('faq')) : while (have_rows('faq')) : the_row(); ?> <li class="questions__item accordion "> <button class=" accordion__control btn-reset "> <span class="questions__item-title"><?php the_sub_field('vopros'); ?></span> <svg class="questions__item-icon" width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <ellipse cx="25" cy="25" rx="25" ry="25" fill="#ECECEC" /> <path fill-rule="evenodd" clip-rule="evenodd" d="M25.0571 24.0571L25.0571 9L25.9429 9L25.9429 24.0571L33.8835 24.0571L41 24.0571L41 24.9429L25.9429 24.9429L25.9429 40L25.0571 40L25.0571 24.9429L10 24.9429L10 24.0571L25.0571 24.0571Z" fill="#666666" /> </svg> </button> <div class="accordion__content"><?php the_sub_field('otvet'); ?></div> </li> <?php endwhile; endif; ?> </ul> </div> </div> </section>
Дополнительно:
Спасибо, что указал, что это ВордПресс и мы сразу имеем понятие, какое условие тебе нужно - have_rows('faq')
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Сейчас
<section>выводится до проверки ACF-поля, поэтому пустой блок все равно появляется. Нужно сначала проверить, есть ли строки в repeater-полеfaq, и только потом выводить весь section.<?php if (have_rows('faq')) : ?> <section class="questions"> <div class="container"> <div class="questions__container"> <h2 class="questions__title">Часто задаваемые вопросы</h2> <ul class="questions__list list accordion-list list flex"> <?php while (have_rows('faq')) : the_row(); ?> <li class="questions__item accordion"> <button class="accordion__control btn-reset" type="button"> <span class="questions__item-title"><?php the_sub_field('vopros'); ?></span> </button> <div class="accordion__content"> <?php the_sub_field('otvet'); ?> </div> </li> <?php endwhile; ?> </ul> </div> </div> </section> <?php endif; ?>
Если repeater может содержать строку без вопроса и ответа, лучше дополнительно пропускать пустые элементы внутри цикла:
$question = get_sub_field('vopros'); $answer = get_sub_field('otvet'); if (! $question && ! $answer) { continue; }
Но главный принцип один: HTML-обертку блока выводим только после проверки данных. Иначе CSS может скрыть визуально пустоту, но в разметке пустой section все равно останется.
Условие нужно ставить вокруг всего
<section>, а не только вокруг цикла внутри него. Сейчас секция, заголовок и контейнер выводятся всегда, даже если повторительfaqпустой. Поэтому проверкуhave_rows('faq')нужно перенести выше.<?php if (have_rows('faq')) : ?> <section class="questions"> <div class="container"> <div class="questions__container"> <h2 class="questions__title">Часто задаваемые вопросы</h2> <ul class="questions__list list accordion-list list flex"> <?php while (have_rows('faq')) : the_row(); ?> <li class="questions__item accordion"> <button class="accordion__control btn-reset" type="button"> <span class="questions__item-title"><?php echo esc_html(get_sub_field('vopros')); ?></span> </button> <div class="accordion__content"> <?php echo wp_kses_post(get_sub_field('otvet')); ?> </div> </li> <?php endwhile; ?> </ul> </div> </div> </section> <?php endif; ?>
Если у вас внутри повторителя бывают строки с пустым вопросом и ответом, одной проверки
have_rows()мало: повторитель формально есть, но полезного контента нет. Тогда сначала соберите строки в массив и выводите секцию только если есть хотя бы один непустой элемент. Это особенно важно для FAQ, чтобы на странице не появлялся пустой блок с заголовком.