ACF - 根据中继器字段中的后端 select 选择更改 link
ACF - change link based on backend select choice in a repeater field
我正在为我网站上的许多内容使用高级自定义字段。特别是员工个人资料页面。我有一个 select 字段,员工可以在其中添加社交图标或电子邮件图标。转发器字段是 'social',如果他们选择 'add a row',则有 'social channel' select 字段和 'social_link' 测试字段。我当前的代码是这样的:
<?php if ( have_rows('social')): ?>
<div class="staff-social">
<?php while ( have_rows('social')) : the_row() ?>
<li><a href="<?= the_sub_field('link'); ?>"><img src="<?= get_template_directory_uri(); ?>/img/footer-<?php the_sub_field('social_channel') ?>.svg" alt="social icon" /></a></li>
<?php endwhile; ?>
</div><!--end staff-social-->
<?php endif; ?>
如果用户从后端的 'social_channel' 下拉列表中 selects 'mail',我需要在我的锚标记前添加一个 'mailto:'。我试过这样做:
<?php while ( have_rows('social')) : the_row() ?>
<li>
<?php $select = get_sub_field_object('social_channel');
$choices = $select['choices'];
foreach ($choices as $choice) {
if ($choice == 'mail') {
echo '<a href="mailto:'.the_sub_field('link').'">';
} else echo '<a href="'.the_sub_field('link').'">';
} ?>
<img src="<?= get_template_directory_uri(); ?>/img/footer-<?php the_sub_field('social_channel') ?>.svg" alt="social icon" />
</a>
</li>
<?php endwhile; ?>
但这当然会为所有选择吐出一些东西,无论它们是否由用户在后端 select编辑。谁能帮我这个?我认为这是非常基本的 PHP 但我不确定该怎么做。任何帮助将不胜感激!
您的 Select 字段应该 return 只是一个字符串,而不是数组,(确保将 'social_channel' 字段设置为不允许多个值) 所以将您的代码更改为:
<?php while ( have_rows('social')) : the_row() ?>
<li>
<?php $select = get_sub_field('social_channel');
if($select == 'mail'){
$linkURL = 'mailto:'.get_sub_field('link');
}else{
$linkURL = get_sub_field('link');
} ?>
<a href="<?php echo $linkURL; ?>"><img src="<?= get_template_directory_uri(); ?>/img/footer-<?php the_sub_field('social_channel') ?>.svg" alt="social icon" /></a>
</li>
<?php endwhile; ?>
我正在为我网站上的许多内容使用高级自定义字段。特别是员工个人资料页面。我有一个 select 字段,员工可以在其中添加社交图标或电子邮件图标。转发器字段是 'social',如果他们选择 'add a row',则有 'social channel' select 字段和 'social_link' 测试字段。我当前的代码是这样的:
<?php if ( have_rows('social')): ?>
<div class="staff-social">
<?php while ( have_rows('social')) : the_row() ?>
<li><a href="<?= the_sub_field('link'); ?>"><img src="<?= get_template_directory_uri(); ?>/img/footer-<?php the_sub_field('social_channel') ?>.svg" alt="social icon" /></a></li>
<?php endwhile; ?>
</div><!--end staff-social-->
<?php endif; ?>
如果用户从后端的 'social_channel' 下拉列表中 selects 'mail',我需要在我的锚标记前添加一个 'mailto:'。我试过这样做:
<?php while ( have_rows('social')) : the_row() ?>
<li>
<?php $select = get_sub_field_object('social_channel');
$choices = $select['choices'];
foreach ($choices as $choice) {
if ($choice == 'mail') {
echo '<a href="mailto:'.the_sub_field('link').'">';
} else echo '<a href="'.the_sub_field('link').'">';
} ?>
<img src="<?= get_template_directory_uri(); ?>/img/footer-<?php the_sub_field('social_channel') ?>.svg" alt="social icon" />
</a>
</li>
<?php endwhile; ?>
但这当然会为所有选择吐出一些东西,无论它们是否由用户在后端 select编辑。谁能帮我这个?我认为这是非常基本的 PHP 但我不确定该怎么做。任何帮助将不胜感激!
您的 Select 字段应该 return 只是一个字符串,而不是数组,(确保将 'social_channel' 字段设置为不允许多个值) 所以将您的代码更改为:
<?php while ( have_rows('social')) : the_row() ?>
<li>
<?php $select = get_sub_field('social_channel');
if($select == 'mail'){
$linkURL = 'mailto:'.get_sub_field('link');
}else{
$linkURL = get_sub_field('link');
} ?>
<a href="<?php echo $linkURL; ?>"><img src="<?= get_template_directory_uri(); ?>/img/footer-<?php the_sub_field('social_channel') ?>.svg" alt="social icon" /></a>
</li>
<?php endwhile; ?>