ランダムに選んだ記事をスライドショーslick.jsでタイトル付きで表示。

ランダムに選んだ記事をスライドショーslick.jsでタイトル付きで表示。

上記画像の通り、

  • jQueryプラグインslick.jsによるスライドショーをWordPressに表示。
  • ランダムに選んだサムネイル(アイキャッチ画像)付き記事のサムネイル画像を表示。
  • スライドボックス左側40%をグラデーションで塗りつぶす。
  • スライドボックス右側70%にサムネイル画像をボックスを埋め尽くすように表示。
  • 左右が重なった部分は透過グラデーションにする。
  • 左側塗りつぶし部分に記事タイトルと投稿日を表示。
  • スライドショー下にはラインを引く。

ということをやろうとしたら、PCでは動いてもスマホで乱れる等、様々な問題が起きました。ここに設定をまとめておきます。

https://pochilog.jp/

slick.js導入

下記リンクからslick.jsをダウンロード。

https://kenwheeler.github.io/slick/

テーマにslickディレクトリを作り下記ファイルを保存。

  • ajax-loader.gif
  • config.rb
  • fonts(ディレクトリ)
  • slick-theme.css
  • slick-theme.less
  • slick-theme.scss
  • slick.css
  • slick.js
  • slick.less
  • slick.min.js
  • slick.scss

テーマにsettingsディレクトリを作り下記ファイルを保存。

  • slick.js

header.phpに下記を記述。

header.phpの<head>〜</head>内に下記を記述。

<?php wp_enqueue_script('slick.min.js',get_template_directory_uri() . '/slick/slick.min.js?ver=1.0', array()); ?>

<?php wp_enqueue_script('slick',get_template_directory_uri() . '/settings/slick.js?ver=1.0', array()); ?>

footer.phpに下記を記述。

footer.phpの</footer>以下、<?php wp_footer(); ?>より前に下記を記述。

<?php wp_enqueue_script('slick.min.js',get_template_directory_uri() . '/slick/slick.min.js?ver=1.0', array()); ?>

<?php wp_enqueue_script('slick',get_template_directory_uri() . '/settings/slick.js?ver=1.0', array()); ?>

記述は環境に合わせて調整してください。

slick.jsを修正。

settings/slick.jsを下記の通りに。

/*---------------------------
slick slider設定
------------------------------*/
jQuery(document).ready(function(){
jQuery('#PostSlide').slick({
autoplay: true,
autoplaySpeed: 4000,//スライド表示時間mm秒
arrows: true,
dots: false,
slidesToShow: 1,
centerMode: true,
centerPadding: '7%',
focusOnSelect: true,
responsive: [
{
breakpoint: 1000,
settings: {
centerPadding: '0',
}
}
]
});
});

HTML

下記をスライドショーを挿入したい位置に記述。

<!--// ランダム記事表示 Slick Sliderスライドショー //-->
<div id="PostSlide" class="clearfix">
<?php
$wp_query = new wp_query( array (
'orderby' => 'rand',//記事をランダムに選択
'posts_per_page' => 8,//8記事
'paged' => $paged,//追加設定でカテゴリを限定可能
'meta_query' => array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS'//サムネイルがある記事のみ
)
)
));
?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div>
<a href="<?php the_permalink() ?>"><img src="<?php the_post_thumbnail_url( 'large' ); ?>" alt="<?php the_title(); ?>" /></a>
<span class="PostSlide-ttl"><?php the_title(); ?><br /><span class="PostSlide-date"><?php the_date(); ?></span></span>
</div>
<?php endwhile; else: ?>
<p>記事がありません</p>
<?php endif; ?>
<?php wp_reset_query(); ?>
</div>
<!--// ランダム記事表示 Slick Sliderスライドショー //-->

CSS

/*--------------------------------------------------------------------------------------------------------------------
■ランダムスライダーslick設定
--------------------------------------------------------------------------------------------------------------------*/
#PostSlide {
position : relative;
margin : 0;
padding : 0;
width : 100%;
height : 50vh;//高さはウィンドウの50%
height : 50dvh;//iPhone対応
max-height : 600px;//最大高さ指定
overflow : hidden;//横揺れ防止のため必須
}
#PostSlide .slick-slide {
position : relative;
padding : 0;
margin : 0;
width : 100%;
height : 50vh;
height : 50dvh;
max-height : 600px;
border-bottom : 1px solid #000;
}
#PostSlide .slick-slide img ,
#PostSlide .slick-slide video {
display: block;//画像をブロック要素とすることでうまく動作
margin : 0 0 0 auto;//画像を右寄せ
width : 70%;
height : 50vh;//ボックスに対して100%とするとうまく動作せず
height : 50dvh;
max-height : 600px;
object-fit : cover;
object-position: 50% 50%;
}
#PostSlide .slick-slide::before {//左側の青い部分を指定
content: '';
position: absolute;
top: 0;
left: 0;
width: 40%;
height: 100%;
background : linear-gradient(to right, rgba(24,56,121, 1) 0%, rgba(24,56,121, 1) 80%, rgba(255, 255, 255, 0) 100% );
z-index: 100;
}
#PostSlide .slick-slide span.PostSlide-ttl {
display : block;
width : 30%;
position: absolute;
top: 3%;
left: 2%;
z-index: 150;
color: #fff;
font-family : var(--font-family02);
font-size : 18px;
line-height : 150%;
font-weight : bold;
text-align : left;
}
#PostSlide .slick-slide span.PostSlide-date {
display : block;
padding : 5px 0 0 0;
margin : 10px 0 0 0;
font-size : 15px;
border-top : 1px solid #eee;
}
@media print, screen and (min-width: 1000px) {
#PostSlide .slick-slide span.PostSlide-ttl {
font-size : 24px;
}
#PostSlide .slick-slide span.PostSlide-date {
font-size : 18px;
}
}

一番上の画像でスライドショーが画面全幅になっているのは、全幅指定の箇所にHTMLを記述しているためです。ブロックの横幅を指定している箇所に記述すると全く違う見た目になります。

手こずったのは以下の件でした。

  • スライドショーの画像を横幅70%にして、ボックス内で右寄せにすること。
  • 同時にofject-fit:coverでボックスを埋め尽くすこととの両立。
  • グラデーションをリニアではなく、横方向の80%地点から透明に持って行く設定。
  • スライドショー全体の高さを50vh/最大600pxとして直下の記事一覧が見えるように調整することと、記事タイトル表示との取り合い。
  • スライドショー全体の下に1pxの黒い線を引いたが表示されなかったこと。これは上に画像が乗るからで、画像のボックスに下線を引くことで解決。
  • スマホでの意味不明な表示の乱れ。下のラインは正しい位置に表示されるが、画像がobject-fit:coverにならない等。これはキャッシュによるものだった。

お試しください。

 

この記事は2025/07/16に公開され、3 views読まれました。

最近1ヶ月で人気の記事

ランダムに選んだ記事をスライドショーslick.jsでタイトル付きで表示。 - デザイン事務所ダウンアンダー 東京都練馬区。Wordpressはおまかせ。ホームページ・印刷など販売促進のためのデザインを提案します。

Copyright©デザイン事務所ダウンアンダー, All Rights Reserved.