Я использую Advanced Custom Fields для многих вещей на моем сайте. Одна вещь, в частности, для страницы профиля персонала. У меня есть поле выбора, где сотрудники могут добавлять социальные иконки или значок электронной почты. Поле повторителя является «социальным», и если они выбирают «добавить строку», есть поле выбора «социального канала» и тестовое поле «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; ?>
Мне нужно добавить «mailto:» к моему тегу привязки, если пользователь выбирает «mail» из выпадающего списка «social_channel» в серверной части. Я пытался сделать:
<?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; ?>
Но это, конечно, выплевывает что-то для всех вариантов, независимо от того, выбраны ли они пользователем в бэкэнде. Кто-нибудь может мне с этим помочь? Я думаю, что это довольно простой PHP, но я не уверен, как это сделать. Любая помощь будет высоко ценится!
Ваше поле выбора должно возвращать только одну строку, а не массив, (убедитесь, что вы установили поле ‘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; ?>
Других решений пока нет …