[WordPress]ACFリピーターフィールドでサムネイル付きスライダーを実装Posted by:岩下 雄一郎
こんにちは、インスパイアの岩下です。
本日はWordPressプラグインのAdvanced Custom Fieldsの繰り返しフィールドで
サムネイル付きのスライダーを実装します。
1.slickスライダーの導入
スライダーにはslickスライダーを使用するので
下記からダウンロードしてヘッダーに読み込みをさせてください。
下の方に「Download Now」があるのでダウンロードして
slick.jsとslick.cssをサーバー上にアップロードしてください。
2.acfで画像とキャプションの繰り返しフィールド作成
acfで繰り返しフィールドを作成します。
今回は例として
繰り返しフィールド:photo-group
画像フィールド:p-photo
テキストフィールド:p-photo-cap
と設定しました。ラベルはお好みで自由にどうぞ。
3.フィールドを吐き出すPHPを用意
カスタムフィールドを出したい箇所に書きコードを記述
<div class="slider-box"> <div class="slick-box type_img main-slide asNavFor"> <?php if ( have_rows( 'photo-group' ) ) : ?> <?php while ( have_rows( 'photo-group' ) ) : the_row(); ?> <div class="slide"> <p class="titles"><?php the_sub_field( 'p-photo-cap' ); ?></p> <p class="image"> <?php $p_photo = get_sub_field( 'p-photo' ); ?> <img src="<?php echo esc_url( $p_photo['url'] ); ?>" alt=""> </p> </div> <?php endwhile; ?> <?php endif; ?> </div> <div class="thumb-box"></div> </div>
4.上記HTMLのクラスを入れたslickカスタムJSを追記
下記JSを追記します。
/*custam*/ jQuery(function($){ var s_count = $('.slick-box.type_img .slide').length; var plusAll = ''; for(var i=0; i<s_count; i++){ var img = $('.slick-box.type_img .slide').eq(i).find('.image'); $('.thumb-box').append('<div class="slide"></div>'); var slide = $('.thumb-box .slide').eq(-1); img.clone().appendTo(slide); } $('.slick-box.type_img.asNavFor').slick({ infinite: true, slidesToShow: 1, slidesToScroll: 1, prevArrow: '<i class="fas fa-chevron-left"></i>', nextArrow: '<i class="fas fa-chevron-right"></i>', fade: true, autoplay: true, autoplaySpeed: 6000, draggable: false, swipe: true, swipeToSlide: true, touchMove: false, pauseOnFocus: false, pauseOnHover: false, pauseOnDotsHover: false, asNavFor: '.thumb-box' //サムネイルのクラス名 }); $('.thumb-box').slick({ infinite: true, slidesToShow: 8, slidesToScroll: 1, asNavFor: '.slick-box.type_img.asNavFor', //スライダー本体のクラス名 focusOnSelect: true, pauseOnFocus: false, pauseOnHover: false, pauseOnDotsHover: false, responsive: [{ breakpoint: 767, settings: { slidesToShow: 2, slidesToScroll: 1, } }] }); $('.slideNext').on('click', function () { $(slider).slick("slickNext"); }); $('.slidePrev').on('click', function () { $(slider).slick("slickPrev"); }); });
5.調整用CSSを追記
CSSは用途に合わせて変えてください。
/* slick */ .slick-box.type_img .slide{ padding: 0; background-color: #f3f8e3; border: 1px solid #ffffff; border-right: none; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; position: relative; margin-bottom: 50px; } .slick-box.type_img .titles{ display: block; padding: 10px 15px; font-size: 125%; font-weight: bold; letter-spacing: 1pt; text-align: center; background-color: rgba(255,255,255,0.8); position: absolute; bottom: -45px; left: 50%; transform: translate(-50%, 0%); -webkit-transform: translate(-50%, 0%); -ms-transform: translate(-50%, 0%); } .slick-box.type_img .image{ margin-bottom: 0; line-height: 0; } .thumb-box .slick-slide p.image img { height: 125px; width: 125px; object-fit: cover; } .slick-box.type_img .image img { width: 100%; height: 575px; object-fit: contain; } .slick-slider i { font-size: 2.5em; position: absolute; top: 50%; transform: translate(0%, -50%); -webkit-transform: translate(0%, -50%); -ms-transform: translate(0%, -50%); z-index: 1; } .slick-slider i.fa-chevron-left { left: 3%; } .slick-slider i.fa-chevron-right { right: 3%; }
後は作成したカスタムフィールドにいくつか画像を入れて動作確認をしてください。
single.phpに入れて使うことで記事毎にスライダーを入れられるので複数画像で詳細を紹介したい
商品紹介や不動産の物件情報などに使えるかと思います。