所以我有一个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>
编辑。。
我尝试在音频标签之外回显标题,但它只回显第二个曲目标题,并且在更改曲目时不会更改。
如果我
理解正确,您想将标题移动到<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 中继器的另一种方法,它可能不像使用循环函数那么容易,但当您稍微移动东西时,它更具可扩展性。