Итак, у меня есть аудиоплеер 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-й дорожки и не изменится при смене дорожек.
Если я правильно понимаю, вы хотите переместить заголовок за пределы <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, который может быть не таким простым, как использование функций цикла, но он более расширяемый, когда вы немного перемещаете вещи.
Других решений пока нет …