Swiper slider в повторителе ACF
Создал swiper-slider с мини-слайдером миниатюр. Все работает нормально. При помещении слайдера в повторитель ACF и создании второго слайдера внутри повторителя перестают отображаться оба. При этом оба мини-слайдера отображаются. В мини-слайдере происходит создание разных ID для разных мини-слайдеров, а также происходит присвоение необходимых классов. В большом слайдере классы и ID не назначаются, но стили подтягиваются. Слайдер используется в шаблоне страницы. При применении данного шаблона на разных страницах сайта слайдер нормально создается и ему присваивается свой ID. Получается, что только внутри повторителя происходит сбой. Как можно добиться нормальной работы?
<?php if( have_rows('otzyv_proekt') ): ?>
<div class="otzyvy_wrapper">
<?php while ( have_rows('otzyv_proekt') ) : the_row(); ?>
<div class="otzyvy-item">
<div class="slider-wrapper">
<div class="swiper-container otzyvy-slider" style="position: relative;">
<div class="swiper-wrapper otzyvy-slider_wrapper">
<?php if( have_rows('slajder_otzyvov') ):
while ( have_rows('slajder_otzyvov') ) : the_row(); ?>
<div class="swiper-slide slider-slide otzyvy-slider_slide" style="height: 300px;">
<div class="otzyvy-slider_image">
<?php if( get_sub_field('izobrazhenie_slajdera_otzyvov') ): ?>
<img src="<?php the_sub_field('izobrazhenie_slajdera_otzyvov'); ?>" alt="img" />
<?php endif; ?>
</div>
</div>
<?php endwhile;
else :
endif;
?>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
<div class="otzyvy-mini-slider swiper-container">
<div class="swiper-wrapper otzyvy-mini-slider_wrapper">
<?php if( have_rows('mini_slajder_otzyvov') ):
while ( have_rows('mini_slajder_otzyvov') ) : the_row(); ?>
<div class="swiper-slide otzyvy-mini-slider_slide">
<div class="otzyvy-mini-slider_image mini-slider_image">
<?php if( get_sub_field('izobrazhenie_mini-slajdera_otzyvov') ): ?>
<img src="<?php the_sub_field('izobrazhenie_mini-slajdera_otzyvov'); ?>" alt="img" />
<?php endif; ?>
</div>
</div>
<?php endwhile;
else :
endif;
?>
</div>
</div>
</div>
<div class="otzyvy-data-wrapper">
<h4><?php the_sub_field('nazvanie_proekta'); ?></h4>
<p><strong>Адрес: </strong><?php the_sub_field('adres_proekta'); ?></p>
<p><strong>Сумма: </strong><?php the_sub_field('stoimost_proekta'); ?></p>
<p style="margin: 25px 0;"><strong>Характеристики:</strong></p>
<?php if( have_rows('harakteristiki_otzyva') ):
while ( have_rows('harakteristiki_otzyva') ) : the_row(); ?>
<p style="margin-bottom: 0; margin-top: 5px;"><?php the_sub_field('punkt_harakteristik_proekta'); ?></p>
<?php endwhile;
endif;
?>
<p style="font-size: 15px; 'margin-top: 20px;"><?php the_sub_field('tekst_otzyva'); ?></p>
<p style="font-size: 15px; 'margin-top: 20px;"><strong><?php the_sub_field('avtor_otzyva'); ?></strong></p>
</div>
<hr style="margin-top: 70px;;">
</div>
<?php endwhile; ?>
</div>
<?php endif; ?>
<script>
new Swiper ('.otzyvy-slider', {
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev'
},
slidesPerView: 1,
thumbs: {
swiper: {
el: '.otzyvy-mini-slider',
slidesPerView: 7,
}
},
});
</script>
Ответы (1 шт):
Проблема решена. При инициации слайдера мы должны предусмотреть присвоение каждому новому слайдеру в повторителе свой ID. В вышеприведенном коде это должно выглядеть так:
<?php if( have_rows('otzyv_proekt') ): ?>
<div class="otzyvy_wrapper">
<?php $sliderId = 1; ?>
<?php while ( have_rows('otzyv_proekt') ) : the_row(); ?>
<div class="otzyvy-item">
<div class="slider-wrapper">
<div class="swiper-container otzyvy-slider otzyvy-slider-<?= $sliderId?>" data-id="<?= $sliderId?>">
<div class="swiper-wrapper otzyvy-slider_wrapper">
<?php if( have_rows('slajder_otzyvov') ):
while ( have_rows('slajder_otzyvov') ) : the_row(); ?>
<div class="swiper-slide slider-slide otzyvy-slider_slide" style="height: 300px;">
<div class="otzyvy-slider_image">
<?php if( get_sub_field('izobrazhenie_slajdera_otzyvov') ): ?>
<img src="<?php the_sub_field('izobrazhenie_slajdera_otzyvov'); ?>" alt="img" />
<?php endif; ?>
</div>
</div>
<?php endwhile;
else :
endif;
?>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
<div class="otzyvy-mini-slider swiper-container otzyvy-mini-slider-<?= $sliderId?>">
<div class="swiper-wrapper otzyvy-mini-slider_wrapper">
<?php if( have_rows('mini_slajder_otzyvov') ):
while ( have_rows('mini_slajder_otzyvov') ) : the_row(); ?>
<div class="swiper-slide otzyvy-mini-slider_slide">
<div class="otzyvy-mini-slider_image mini-slider_image">
<?php if( get_sub_field('izobrazhenie_mini-slajdera_otzyvov') ): ?>
<img src="<?php the_sub_field('izobrazhenie_mini-slajdera_otzyvov'); ?>" alt="img" />
<?php endif; ?>
</div>
</div>
<?php endwhile;
else :
endif;
?>
</div>
</div>
</div>
<script>
const otzyvySliders = document.querySelectorAll('.otzyvy-slider') ;
otzyvySliders.forEach(buildOtzyvySlider);
function buildOtzyvySlider (slider) {
const sliderId = slider.dataset.id;
new Swiper (`.otzyvy-slider-${sliderId}`, {
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
slidesPerView: 1,
lazy: true,
thumbs: {
swiper: {
el: `.otzyvy-mini-slider-${sliderId}`,
slidesPerView: 7,
lazy: true,
}
},
});
}
</script>