ACFの関係フィールドで、関連投稿をslickのループ無しカルーセルで表示

  • Plugin
  • 当BLOGやDEMO等では、関連のある投稿を、RECOMMENDで表示しています。これは、ACF関係フィールドを使用しています。今回は、ACF関係フィールドで、関連投稿をslickのループ無しカルーセルで表示する方法を紹介します。

     出典 : slick

    今回のDEMOは、DEMOの関連一覧です。

    8つの投稿をカルーセルで表示しています。ループされず、最初と最後の投稿が表示される時、矢印が非表示になります。キャプションは、抜粋に入力しています。

    ACF設定

    フィールドタイプは、関係です。フィールドラベルに編集画面に表示する名前、フィールド名にPHPに記入する名前を設定します。投稿タイプでフィルターは、DEMOに設定します。投稿ステータスで絞り込むは、公開済みに設定します。フィルターは、検索タクソノミーにチェックを入れます。戻り値の形式は、投稿オブジェクトです。

    フィールドタイプは、関係

    コード

    シングルページループ内に下記コードを入力します。

    <div class="noloop_carousel">
    	<ul class="noloopslider fade-in fade-in-up">
    		<?php $acf_post_objects = get_field('nholoop_connection'); if( $acf_post_objects ): ?>
    			<?php foreach( $acf_post_objects as $post): ?>
    				<?php setup_postdata($post); ?>
    					<li>
    						<article class="news">
    							<div class="about-news-icon zoomIn">
    								<a href="<?php echo esc_url(get_permalink()); ?>">
    									<?php if(has_post_thumbnail()): ?>
                        					<?php the_post_thumbnail('medium_large'); ?>
                						<?php endif; ?>
    								</a>
    							</div>
    							<div class="detail-link">
    								<div class="post-category">
    									<?php
    										$terms = get_the_terms($post->ID, 'demo-cat');
    										if ($terms) :
        										foreach ($terms as $term) {
            										echo '<a href="' . get_term_link($term) . '">' . $term->name . '</a>';
        										}
    										endif;
    									?>
    								</div>
    							</div>
    							<time class="time"><?php the_time( 'Y.m.d' ); ?></time>
    							<a class="detail-link" href="<?php echo esc_url(get_permalink()); ?>">
                  					<p class="title"><?php the_title(); ?></p>
                  					<p class="news-text"><?php echo get_the_excerpt(); ?></p>
    							</a>
            				</article>
    					</li>
    				<?php endforeach; ?>
    			<?php wp_reset_postdata(); ?>
    		<?php endif; ?>
    	</ul>
    </div>

    jQueryslickを読み込みます。新たにJavaScriptファイルを作成し、下記コードを入力し、読み込みます。

    $('.noloopslider').slick({
    	autoplay: false,
    	infinite: false,
    	slidesToShow: 4,
    	slidesToScroll: 1,
    	prevArrow: '<div class="slick-prev"></div>',
    	nextArrow: '<div class="slick-next"></div>',
    	dots: false,
    	responsive: [
    		{
    			breakpoint: 1250,
    			settings: {
    				slidesToShow: 3,
    				slidesToScroll: 1,
    			}
    		},
    		{
    			breakpoint: 740,
    			settings: {
    				slidesToShow: 2,
    				slidesToScroll: 1,
    			}
    		}
    	]
    });

    CSSでスタイルを整えます。

    .noloop_carousel {
    	padding: 10em 0;
    	margin: auto;
    	width: 80%;
    	max-width: 1700px;
    }
    
    .noloopslider {
        width: 100%;
        margin: 0 auto;
    }
    
    .noloopslider .slick-slide {
        margin: 0 10px;
    }
    
    .noloopslider .slick-prev, 
    .noloopslider .slick-next {
        position: absolute;
        top: 42%;
        cursor: pointer;
        outline: none;
        border-top: 2px solid #333;
        border-right: 2px solid #333;
        height: 20px;
        width: 20px;
    	z-index: 5;
    }
    
    .noloopslider .news .title{
    	text-align: left ;
    	font-size: 1.5em ;
    	padding: 0.2em 0 0.5em;
    	margin: 0 ;
    }
    
    .noloopslider .news-text {
    	padding: 0 ;
    }
    
    .noloopslider .about-news-icon {
    	width:100%;
    	height:120px;
    	overflow: hidden;
    	float:left;
    	margin-right:20px;
    	object-position:50% 50%;
    	margin-bottom:12px;
    	border-radius: 5px;
    	will-change: transform;
    }
    
    .noloopslider .slick-prev {
        left: -20px;
        transform: rotate(-135deg);
    }
    
    .noloopslider .slick-next {
        right: -20px;
        transform: rotate(45deg);
    }
    
    .about-news-icon {
    	
    }
    
    .noloopslider .about-news-icon img {
    	width: 100%;
    	height: 100%;
    	object-fit: cover;
    }
    
    .noloopslider .news .post-category {
    	font-weight: 400;
    	font-style: italic;
    	float: left;
    	font-size: 1.2rem;
    	padding-left: 7px;
    	padding-right: 7px;
    	padding-top: 4px;
    	margin-right: 1rem;
    	border:solid 1px #272727;
    	border-radius: 5px;
    }
    
    .zoomIn img {
    	transform: scale(1);
    	transition: .3s ease-in-out;
    }
    
    .zoomIn a:hover img {
    	transform: scale(1.2);
    }
    
    .slick-disabled {
    	visibility: hidden;
    }
    
    @media screen and (min-width: 740px) {
    
    	.noloopslider .about-news-icon {
    		height: 150px ;
    	}
    
    }
    
    @media screen and (min-width: 1250px) {
    
    	.noloopslider .about-news-icon {
    		height: 220px ;
    	}
    
    }

    設置

    ACFノーループカルーセルのフィールドが作成されます。左のセレクターに、DEMOのタイトルが表示されるので、ACF POPUPをクリックします。右のBOXに表示されるので、これで1つ設置完了です。同じように、他、7つの投稿も設置します。

    ACF POPUPをクリック

    右のBOXに表示されるので、これで1つ設置完了

    他、7つの投稿も設置

    補足として、今回のACF設定では、タクソノミーを選択のセレクターからタクソノミーでソートすることが出来ます。また、検索BOXにキーワードを入力し、検索することもできます。

    タクソノミーを選択のセレクターからタクソノミーでソート

    検索BOXにキーワードを入力

    以上で、今回の説明は終了です。関連記事も、カルーセルにすると、コンパクトに表示できます。また、記事によって、関連記事数を変えても、デザイン的に崩れないので便利です。