カルーセルの表示枚数、最大枚数を変更する方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

カルーセルの表示にはライブラリ「Slick.js」を使用しています。
これにより、画面幅に応じて表示するカードの枚数や、一度にスライドするカードの枚数が固定されています。
また、最小表示枚数はCocoon設定→カルーセル→最大表示数で12枚となっています。

そこで、スライドするカードの枚数などの固定設定を変更します(表1参照)。

この記事では、この方法について説明します。

slickの設定
brakpointslidesToShowslidesToScroll
66
124155
102444
83533
48122

実装手順

以下のコードをfunctions.phpに追加します。
ここでは、slidesToShowとslidesToScrollを全て1枚に変更する例を示します。

add_filter('script_loader_tag', function ($tag, $handle, $src) {
  if ($handle !== 'slick-js') {
    return $tag;
  }

  $rules = [
    [
      // スライド表示数
      'search'  => '/slidesToShow:\s*\d/',
      'replace' => 'slidesToShow: 1',
    ],
    [
      // スライドスクロール数
      'search'  => '/slidesToScroll:\s*\d/',
      'replace' => 'slidesToScroll: 1',
    ],
  ];

  foreach ($rules as $rule) {
    $tag = preg_replace($rule['search'], $rule['replace'], $tag);
  }

  return $tag;
}, 10, 3);

script_loader_tagフィルターを使用することで、スクリプトのハンドラに基づいて処理へ介入し、出力される<script>タグを動的に差し替えることができます。

参考:従来の方法からの変更

以下のように wp_enqueue_slick()関数を子テーマのfunctions.phpにコピーして上書きする方法は、現在では推奨されません。

WordPress 4.1以降では<script>タグをフィルターする仕組みが導入されており、より柔軟かつ安全にスクリプトの変更を行えます。
さらにWordPress 6.9では、Cocoonの最終HTML出力制御フックと同等の機能を持つフィルターが標準で追加されました。

これらの標準機能を活用する方法が推奨されます。

参考:カルーセルを無限ループスライドさせる方法

Cocoon標準のカルーセルはオートプレイ時に6枚単位で一度停止します。

そこで、より滑らかで切れ目なく流れる無限ループスライドに変更します(表2参照)。

変更点
項目元のコード変更後視覚的効果
slidesToScroll611枚ずつ滑らかに流れる
dotstruefalseドットが消えて連続感アップ
speed & easingデフォルト5秒/枚 + linear切れ目なく流れる
pauseOnHover / Focustrue(デフォルト)falseマウスを置いても止まらない
infinitetruetrue無限ループは維持

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('script_loader_tag', function ($tag, $handle, $src) {
  if ($handle !== 'slick-js') {
    return $tag;
  }

  $rules = [
    [
      // スクロール数
      'search'  => '/slidesToScroll:\s*\d+/',
      'replace' => 'slidesToScroll: 1',
    ],
    [
      // 待ち時間
      'search'  => '/autoplaySpeed:\s*\d+/',
      'replace' => 'autoplaySpeed: 0',
    ],
    [
      // ドットを非表示
      'search'  => '/dots:\s*true/',
      'replace' => 'dots: false',
    ],
    [
      // infiniteの後に設定を追加
      'search'  => '/infinite:\s*true\s*,?/',
      'replace' => 'infinite: true, arrows: false, cssEase: "linear", speed: 5000, pauseOnHover: false, pauseOnFocus: false,',
    ],
  ];

  foreach ($rules as $rule) {
    $tag = preg_replace($rule['search'], $rule['replace'], $tag);
  }

  return $tag;
}, 10, 3);

さいごに

今回紹介した方法を使えば、Slick.jsを用いたカルーセルの表示枚数やスライドの挙動を柔軟にカスタマイズできます。
これにより、サイトのデザインや要件に合わせたカスタマイズが簡単に実現できるでしょう。

タイトルとURLをコピーしました