WordPressでSwiperを使って、両端がちょっと見切れるカルーセルスライダー

こんにちは!
今日はスライダーを作れるJSライブラリ「Swiper」を使って、プラグインを使わずにWordPressにスライダーを実装してみました。

WordPressにスライダーを表示させるプラグインは数あるのですが、なぜか「カルーセル」を無料で使えるプラグインがなかなか有りません。別にカルーセル表示にこだわらなければ、プラグインを使えばよいと思います(「Smart Slider 3」や「WP Carousel」が、良い感じでした!)。
もちろんプロプランを契約すればカルーセルのオプションも使えるのですが、1サイトにつき5,000~8,000円となっていて、カルーセル機能のためだけにそんなに出すのは…ということで、「Swiper」というライブラリを使って実装していきたいと思います。

デモ

おおまかな仕組み

「slider」というカテゴリースラッグの投稿があった場合に、その投稿のアイキャッチ画像がスライダーとして表示されるようにしました。

function.phpに以下を追記

// Swiperの読み込み
function enqueue_swiper_scripts() {
wp_enqueue_style('swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css');
wp_enqueue_script('swiper-js', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js', array(), null, true);
wp_add_inline_script('swiper-js', "

// TOPスライダ
const swiperMain = new Swiper('.swiper', {
loop: true, // ループ有効
slidesPerView: 1, // ★重要
centeredSlides: true, // ★重要
spaceBetween: 5, // 画像の余白
speed: 1500,
autoplay: {
delay: 1500,
disableOnInteraction: false,
},
breakpoints: {
768: { slidesPerView: 1 }, // 横幅768~1024pxでは1枚だけ表示
1024: { slidesPerView: 1.3 } // 横幅1024px~では両端にもちょっと表示 ★重要
}
});

");
}
add_action('wp_enqueue_scripts', 'enqueue_swiper_scripts');

sliderを動かすためのjsとオプションを記述します。

ポイント

  • CDNについて:最初はSwiperの最新バージョン(11)を読み込んでいたのですが、それだとなぜかループの次の画像が一瞬表示されないというバグがあったので、jsについてはバージョン8を読み込んでいます。
  • 「loop」を有効にすることでカルーセル的に表示されます。
  • 「slidesPerView」オプションを「1.3」とすることで、一度に1.3枚を表示することができます。これにより両脇に0.3(各15%ずつ)の幅分見切れて表示されます。
  • 「centeredSlides」を「true」にすることで、中央のスライダーが「アクティブ」になり(大きくなり)ます。
  • スマホでは見切れずに1枚だけ表示させたい場合は、「breakpoints」のオプションで指定してください。その場合は、基本のslidesPerViewを「1」にしておく必要があります。
  • 今回できるだけシンプルにするために、矢印やdotsは表示していませんが、オプションが用意されていますので、気になる方はSwiperのドキュメントを参照してください!

以下のPHPを作成

<div class="swiper">
<div class="swiper-wrapper">
<?php
    $args = array(
      'post_type'      => 'post',
      'posts_per_page' => -1,
      'category_name'  => 'slider',
      'orderby'        => 'date',
      'order'          => 'DESC',
    );
    $the_query = new WP_Query($args);
    if ($the_query->have_posts()) :
      while ($the_query->have_posts()) : $the_query->the_post(); ?>
        <div class="swiper-slide">
          <div class="top-slider-item">
            <?php the_post_thumbnail('full'); ?>
          </div>
        </div>
      <?php endwhile;
      wp_reset_postdata();
    endif;
    ?>
  </div>
</div>

テーマファイルの、スライダーを表示させたい場所に上記phpを追記するか、別のphpファイルをテーマに追加して、ショートコードなどで表示したい場所に読み込めるようにしてください。

CSSに以下を追加

.top-slider-item img {
    object-fit: cover;
    height: 350px;
    width: 100%;
}

ポイント

  • 「.top-slider-item img」に「height」「width」を指定することで、大きさの異なる画像も統一サイズのスライダーとして表示されるようになります。
    「height」は実際に表示したいスライダーのサイズに調整してください。
  • 「object-fit」を指定することで、縦横比を保ったまま、はみ出した部分をトリミングしてくれます。

以上で完成です!お試しください。

edit_note参考にさせていただきました