カスタム投稿タイプの投稿をまとめて、新着情報として一覧表示

  • PHP
  • CMSサイトで、複数投稿タイプを作るとき、カスタム投稿タイプを使用します。通常投稿を表示する時は、カスタム投稿タイプごとに一覧表示されます。今回は、カスタム投稿タイプ投稿をまとめて、新着情報として一覧表示する方法を紹介します。

     出典 : slick

    今回のDEMOは、WORKSBLOGDEMOの一覧です。

    6つ投稿を、slickで表示しています。サムネイルCPTのラベル投稿日抜粋を表示しています。

    コード

    PHPの表示させたい場所に下記コードを入力します。

    <div class="newtopics_carousel">
    	<h3 class="newtopics_heading">NEW TOPICS</h3>
    	<ul class="slider">
    		<?php
    			$custom_posts = get_posts(array(
    				'post_type' => array('all_blogs','all_works','all_demos'),
    				'posts_per_page' => 6,
    			));
    			global $post;
    		?>
    		<?php if($custom_posts): ?>
    			<?php foreach($custom_posts as $post): 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'); ?>
                					<?php else: ?>
                    					<img src="<?php echo esc_url(get_theme_file_uri('/assets/images/cxglogo_damy001.jpg')); ?>" alt="damy" >
                					<?php endif; ?>
    							</a>
    						</div>
    						<a href="<?php echo get_post_type_archive_link( get_post_type() ); ?>">
    							<div class="detail-link">
    								<div class="post-category">
    									<?php echo esc_html(get_post_type_object(get_post_type())->label); ?> 
    								</div>
    							</div>
    						</a>
    						<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 endif; wp_reset_postdata(); ?>
    	</ul>
    </div>														

    slickJavaScriptを読み込みます。JavaScriptファイルを作成し、下記コードを記入し、読み込みます。

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

    CSSslickスタイルを整えます。

    .slider {
       width: 100%;
       margin: 0 auto;
    }
    
    .slider .slick-slide {
        margin: 0 30px;
    }
    
    .slick-prev, 
    .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;
    }
    
    .slick-prev {
        left: -1.5%;
        transform: rotate(-135deg);
    }
    
    .slick-next {
        right: -1.5%;
        transform: rotate(45deg);
    }
    
    .slick-dots {
        text-align:center;
    	margin:5px 0 0 0;
    }
    
    .slick-dots li {
        display:inline-block;
    	margin:0 5px;
    }
    
    .slick-dots button {
        color: transparent;
        outline: none;
        width: 10px;
        height: 10px;
        display: block;
        border-radius: 50%;
        background: #ccc;
    }
    
    .slick-dots .slick-active button{
        background: #333;
    }
    
    @media screen and (min-width: 740px) {
    
    	.slider .slick-slide {
        	margin: 0 15px;
    	}
    	
    	.slick-prev {
        	left: -3%;
    	}
    	
    	.slick-next {
    		right: -3%;
    	}
    	
    	.slick-dots {
    		margin: 25px 0 25px 0;
    	}
    	
    }
    
    @media screen and (min-width: 1250px) {
    	
    	.slick-prev {
        	left: -2%;
    	}
    	
    	.slick-next {
    		right: -2%;
    	}
    }

    あとは、見出しカテゴリーサムネイルなどのスタイルCSSで整えて完成です。

    デフォルトの投稿は、表示方法が異なります。

    デフォルトの投稿(post)とカスタム投稿タイプは表示するコードが異なります。設計時に、まとめて表示する可能性のあるものは、投稿タイプをまとめましょう。

    サムネイルの比率に注意

    今回のDEMOでは、投稿タイプによってサムネイルの比率が違うため、BLOGのサムネイルが切れています。複数投稿タイプ一覧表示を考える場合、サムネイルの比率を合わせたり、比率に関係ないサムネイルデザインにしましょう。

    以上で、今回の説明は終了です。投稿タイプ複数ある場合、新着情報トップにあると便利ですね。最新の投稿NEWマークを付けて、目をひくデザインにすることもできます。

    RECOMMEND

    CONTACT

    Webサイト作成は、是非
    CXG DESIGNへご検討ください。