如何在 ACF 中为字段类型重复器附加文本?
Posted
技术标签:
【中文标题】如何在 ACF 中为字段类型重复器附加文本?【英文标题】:How do I append text in ACF for field type repeater? 【发布时间】:2016-09-27 17:20:29 【问题描述】:有时我会有 2 个链接或 1 个链接。
<a target="_blank" href="<?php the_sub_field('playlist-url'); ?>"><?php the_sub_field('media-player'); ?></a>
我想在两个链接之间添加“或”。因此,如果有 2 个链接,请添加“或” 例如,“Soundcloud 或 Youtube”
如果有 1 个链接,请不要添加“或”。例如,“Soundcloud”
<div class="container-wrap" id="music">
<?php
$args = array('post_type' => 'music-playlist-1');
$query = new WP_Query($args);
$cntr = 0;
while( $query -> have_posts() ) : $query -> the_post(); $cntr++; ?>
<section class="row-wrap">
<div class="row-inner">
<?php if ($cntr % 2 == 1) ?>
<?php
$image = get_field('artwork');
if( !empty($image) ): ?>
<img class="artwork" src="<?php echo $image['url']; ?>">
<?php endif; ?>
<div class="artwork-content">
<h1><?php the_field('playlist-name'); ?></h1>
<button class="btn-wrap">
<div class="btn">listen now</div>
</button>
<div class="option-bar">
<?php
// check if the repeater field has rows of data
if( have_rows('playlist_link') ):
// loop through the rows of data
while ( have_rows('playlist_link') ) : the_row();
?>
<a target="_blank" href="<?php the_sub_field('playlist-url'); ?>"><?php the_sub_field('media-player'); ?></a>
<?php
endwhile;
else :
// no rows found
endif;
?>
</div>
</div>
<?php else ?>
<div class="artwork-content">
<h1><?php the_field('playlist-name'); ?></h1>
<button class="btn-wrap">
<div class="btn">listen now</div>
</button>
<div class="option-bar">
<?php
// check if the repeater field has rows of data
if( have_rows('playlist_link') ):
// loop through the rows of data
while ( have_rows('playlist_link') ) : the_row();
?>
<a target="_blank" href="<?php the_sub_field('playlist-url'); ?>"><?php the_sub_field('media-player'); ?></a>
<?php
endwhile;
else :
// no rows found
endif;
?>
</div>
</div>
<?php
$image = get_field('artwork');
if( !empty($image) ): ?>
<img class="artwork" src="<?php echo $image['url']; ?>">
<?php endif; ?>
<?php ?>
</div>
</section>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
【问题讨论】:
【参考方案1】:我实际上从未使用过中继器行,但查看文档我假设您可以检查您是否在第一行,如果 get_row_index()
为 0(因为似乎没有办法检查您是否在在最后一行)。因此:
编辑:好的,现在我已经尝试过了。对不起。 get_row_index()
是 5.3.4 版本中的新内容。也许这是你的问题?
这是一个没有get_row_index()
的解决方案
我在添加的每一行之前添加了+
。
<?php
// check if the repeater field has rows of data
if (have_rows('playlist_link')):
+ // We set a flag for the first row
+ $is_first = true;
// loop through the rows of data
while (have_rows('playlist_link')) : the_row();
+ if ($is_first) :
+ $is_first = false;
+ else :
+ echo " OR ";
+ endif; ?>
<a target="_blank" href="<?php the_sub_field('playlist-url'); ?>"><?php the_sub_field('media-player'); ?></a>
<?php
endwhile;
else :
// no rows found
endif;
?>
编辑 2:我们如何使其可重复使用?
好的,我会用超级简单的方法来做这件事。我把所有的代码,包装在一个函数中……然后放到functions.php
:
function playlist_links() // <--This line is new
if (have_rows('playlist_link')):
$is_first = true;
while (have_rows('playlist_link')) : the_row();
if ($is_first) :
$is_first = false;
else :
echo " OR ";
endif; ?>
<a target="_blank" href="<?php the_sub_field('playlist-url'); ?>"><?php the_sub_field('media-player'); ?></a>
<?php
endwhile;
endif;
// <--This line is also new
然后在您的模板文件中,您可以将所有代码替换为
<?php playlist_links(); ?>
如果你愿意,可以多次使用它。
(如果您只在单个页面模板上使用此函数,那么functions.php
可能不是最好的地方,因为它会随处加载。您可以直接在模板文件中创建函数。)
【讨论】:
感谢您的回答,但它不起作用。我应该把代码放在 里面吗?在我输入代码后,播放列表链接不显示,其他音乐描述和标题,艺术品不显示。让我知道这是否正确。 那我的错!抱歉,我应该在给出答案之前对其进行测试!我对其进行了一些编辑以仅显示重要部分。 (我仍然认为它应该可以工作!) 你的意思是在 ? 你能告诉我整个事情吗?我尝试了它,但它不起作用:( 我有2个while循环,哪个while循环?以上是关于如何在 ACF 中为字段类型重复器附加文本?的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress ACF:如何通过自定义代码(PHP)将行添加到附加到用户的转发器字段