繁体   English   中英

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM