Расширенные пользовательские поля: циклически проходить значения групповых подполей? - PullRequest
0 голосов
/ 29 августа 2018

Честное предупреждение, я нуб PHP. Первый пост тоже:)

На данный момент у меня есть группа ACF с 3 подполями. Я хочу пройтись по этим подполям и повторить их 'label' и 'value'. Если подполе пустое, то я бы хотел, чтобы цикл пропускал / не отображал значение. Я могу имитировать с помощью следующего:

<?php
$objective_desc = "objective_desc";
$objective = get_field_object($objective_desc);
?>

 <div class="item">
        <?php if ( $objective_desc ): ?>
            <h2 class="sub-sample-title"><?php echo $objective['label']; ?></h2>
        <?php endif; ?>

        <?php if ( $objective_desc ): ?>
             <p class="sub-description"><?php echo $objective['value']; ?></p>
        <?php endif; ?>
</div>

Проблема в том, что мне пришлось бы копировать и вставлять каждое подполе в группе. Я уверен, что есть более элегантный способ сделать это.

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, у вас есть опечатка в коде, который вы разместили; Вы, вероятно, хотите проверить, не являются ли «подполя» пустыми, отметив <?php if ( $objective_label ): ?> вместо <?php if ( $objective_desc ): ?>, верно? Если вы просто проверяете, является ли $objective_desc пустым каждый раз, вы можете сделать все это в пределах одного if блока.

Будьте осторожны с использованием пустых if операторов, чтобы проверить, является ли переменная пустой. Вы должны использовать empty вместо: <?php if ( empty($objective_desc) ): ?>. В вашем коде вы устанавливаете $jective_desc наверх, поэтому он будет оцениваться как true , даже если в нем ничего нет.

Вероятно, есть какой-то запутанный способ, которым вы можете настроить циклы и дополнительные переменные, чтобы сделать его более "элегантным", но, поскольку вы, честно говоря, изменяете другие элементы HTML на основе подполя (<h2>, <p> и т. Д.), вам лучше копировать и вставлять в кучу if операторов. Это будет понятнее, работать так же быстро, и будет легче отлаживать. Мои два цента.

...