Повторитель расширенных пользовательских полей WordPress отображает заголовок вне цикла

Итак, у меня есть аудиоплеер mediaelement.js, и я использую плагин расширенных настраиваемых полей, и я хочу иметь возможность отображать название текущей дорожки на плеере, вот мой код

<audio class="mejs-new" style="width: 100%; height: auto;" controls width="100%" height="auto">

<?php if(get_field('audio_repeater')): ?>

<?php while(has_sub_field('audio_repeater')): ?>

<?php $title = get_sub_field('music_title'); ?>
<source src="<?php the_sub_field('music_url'); ?>" title="<?php echo $title; ?>" type="audio/mp3">
<p><?php echo $title; ?></p>
<?php endwhile; ?>

<?php endif; ?>
</audio>

Редактировать..

Я попытался повторить заголовок за пределами аудиотега, но он повторяет только заголовок 2-й дорожки и не изменится при смене дорожек.

-1

Решение

Если я правильно понимаю, вы хотите переместить заголовок за пределы <audio /> тег, но вы можете получить только заголовок из цикла.

Вы почти там на самом деле — самый простой способ сделать это — установить заголовок переменной, пока вы находитесь в цикле, что вы уже делаете ($title = get_sub_field('music_title');). Итак, теперь все, что вам нужно сделать, это отобразить переменную, когда вам это нужно.

Поскольку вы уже установили переменную, когда у вас был доступ к функциям в цикле, теперь вы можете выводить эту переменную впоследствии без необходимости в цикле.

Например:

    <?php endif; ?>
</audio>

<p><?php echo $title; ?></p>

РЕДАКТИРОВАТЬ:

Я предполагал, что у вас был только один заголовок, и я не задавался вопросом, почему вы используете ретранслятор с одним заголовком 🙂 Чтобы распечатать список заголовков впоследствии, вы можете использовать аналогичный подход, за исключением того, что на этот раз вам нужно сохранить результаты цикла, а затем снова пройти через него.

простой способ сделать это — повторить весь код цикла, но только распечатать заголовок, но это немного неэффективно. В идеале, мы должны получить поле только один раз. Вот еще один способ сделать все это:

<?php $audio_repeater = get_field("audio_repeater"); ?>

<audio class="mejs-new" style="width: 100%; height: auto;" controls width="100%" height="auto">

<?php if((array) count($audio_repeater)): ?>

<?php foreach($audio_repeater as $audio_source): ?>

<source src="<?php echo $audio_source["music_url"]; ?>" title="<?php echo $audio_source["music_title"]; ?>" type="audio/mp3">

<?php endforeach; ?>

<?php endif; ?>
</audio>

<?php foreach($audio_repeater as $audio_source): ?>
<p><?php echo $audio_source["music_title"]; ?></p>
<?php endforeach; ?>

В этом примере мы собираем весь ретранслятор ACF один раз сверху и присваиваем его переменной. Затем мы проверяем, есть ли в нем элементы, и перебираем эти элементы.

Это альтернативный способ использования повторителей ACF, который может быть не таким простым, как использование функций цикла, но он более расширяемый, когда вы немного перемещаете вещи.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]