WordPress 高级自定义域转发器显示循环的标题外站


Wordpress Advanced Custom Fields repeater display title outsite of loop

所以我有一个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 中继器的另一种方法,它可能不像使用循环函数那么容易,但当您稍微移动东西时,它更具可扩展性。