【SWELL】トップページ以外に記事スライダーを表示するカスタマイズ術

記事内にプロモーションを含む場合があります。
【SWELL】トップページ以外に記事スライダーを表示するカスタマイズ術

トップページ以外でも記事スライダーを表示したい!」

SWELLのデフォルト機能では、記事スライダー(投稿リストのスライド表示)はトップページのみに適用できる仕様になっています。

しかし、サイトによっては「トップページにはスライダーを表示させず、投稿ページや固定ページでのみ記事スライダーを使いたい!」というケースもありますよね!
例えば、ブログサイトではなく、ホームページなどのサイト型仕様にした場合など。。。

実際にSWELLの標準機能ではこの設定がないため、ちょっとしたカスタマイズを加えることで実現できます!
今回は、SWELLの子テーマを活用して、トップページではなく「投稿ページでのみ記事スライダーを表示する方法」を解説します!

今回はこの投稿ページに表示させる方法を実践しました!

ワンクリックで目的地へGO!

SWELLのデフォルト仕様と問題点

SWELLの記事スライダーはトップページ専用

SWELLでは、記事スライダー(投稿リストブロックのスライド表示)は、デフォルトではトップページのみ表示可能です。
しかし、固定ページや投稿ページでは、スライダーを設置できる設定がありません。

でも投稿ページで表示させたい!

例えば、以下のようなサイト構成を考えている場合、デフォルト機能では対応できません。

  • トップページはホームページとしてデザインし、スライダーを非表示にする
  • 投稿ページ固定ページで記事スライダーを表示させたい!

    そこで、少しのカスタマイズを加えるだけで、好きなページに記事スライダーを設置できるようになります!

トップページ以外に記事スライダーを設置する手順

このカスタマイズで、投稿ページや固定ページにもスライダーを表示できます!

① SWELL子テーマのfunctions.phpにコードを追加

まず、トップページ以外でもスライダーを動作させるためのスクリプトを読み込む設定を行います。

  • WordPress管理画面 →「外観」→「テーマファイルエディター」を開く
  • 子テーマのfunctions.php に以下のコードを追加してファイルを更新
// SWELLの投稿スライダー用スクリプト&スタイルを有効化
wp_enqueue_script('swell_swiper');
wp_enqueue_style('swell_swiper');

このコードの役割
デフォルトではトップページ専用になっている記事スライダーのスクリプトを、投稿ページや固定ページでも有効にする!

記述場所例

② 固定(投稿)ページの設定と追加CSS

次に、スライダーを表示したい固定ページ(または投稿ページ)に、投稿リストブロックを追加し、以下の設定をします。

「投稿リストブロック」を追加したら、以下の設定を行います!

記事スライダーの表示設定

おすすめの設定解説

スライダーを表示するために、投稿リストブロックの設定をしていきます!
設定によってデザインや表示の仕方が変わるので、どんな設定が最適かを理解しておきましょう!

設定項目推奨設定理由
表示する投稿数6〜8枚SWELLの最大数に合わせるため!
※表示する投稿数は表示させたい枚数の2倍で設定するのがおすすめ!
レイアウトを選択カード型 or サムネイル型スライダー向きのデザイン!
投稿の表示順序新着順 or ランダム記事を強調するか、ランダム表示で変化をつけるか!
カテゴリー表示位置お好みでOK!記事のカテゴリを見せるかどうか!
タイトルのHTMLタグタh2 または divh2ならSEO的に見出し、divなら自由なデザイン!
最大カラム数 (PC / SP)どれでもOK!スライダーには影響しない!
抜粋文の文字数 (PC / SP)お好みでOK!PCとSPで違いをつけても良い!
MOREリンクの表示テキスト空欄記事スライダーなので不要!

追加CSS

高度な設定→「追加CSS」に以下のクラスを追加

swiper swiper-postListWrap

これにより、スライダーのためのクラスが適用される!

③ CSSでレイアウトを整える

スライダーを綺麗に表示させるために、以下のカスタムCSSを追加します。

/* SWELL投稿スライダー用のCSS */

/* 共通設定 */
.swiper-postListWrap .p-postList {
    flex-wrap: nowrap;
    margin: 0;
}

/* カード型レイアウト調整 */
.swiper-postListWrap .-type-card .p-postList__item,
.swiper-postListWrap .-type-thumb .p-postList__item {
    padding: 0;
}

/* ページネーションデザイン調整 */
.swiper-postListWrap .swiper-pagination-bullet {
    background: currentcolor;
    color: inherit;
}

/* サムネイル型レイアウト調整 */
.p-postList.-type-thumb + .swiper-pagination {
    bottom: -4.5px;
}

このCSSの役割
投稿スライダーのレイアウトを調整!
ページネーション(スライドの下のドット)をカスタマイズ!

④ JavaScriptでスライダーを初期化

最後に、スライダーを動作させるためのスクリプトを固定ページ内のカスタムJSに追加します。

// SWELL投稿スライダーの初期化スクリプト
document.addEventListener('DOMContentLoaded', function () {
    const elmPostListWrap = document.querySelector('.swiper-postListWrap');
    
    if (!elmPostListWrap) return;

    const elmSwiper = elmPostListWrap.firstElementChild;
    if (!elmSwiper) return;

    // クラスの追加(Swiper用の設定)
    elmSwiper.classList.add('swiper-wrapper');
    Array.from(elmSwiper.children).forEach(child => child.classList.add('swiper-slide'));

    // ナビゲーション・ページネーション要素の追加
    ['swiper-pagination', 'swiper-button-prev', 'swiper-button-next'].forEach(className => {
        const element = document.createElement('div');
        element.classList.add(className);
        elmPostListWrap.appendChild(element);
    });

    // Swiperの初期化
    new Swiper('.swiper-postListWrap', {
        loop: true,
        slidesPerView: 1,
        spaceBetween: 16,
        centeredSlides: true,
        speed: 1500,
        autoplay: {
            delay: 5000,
            disableOnInteraction: false
        },
        pagination: {
            el: '.swiper-pagination',
            type: 'bullets',
            clickable: true
        },
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev'
        },
        breakpoints: {
            960: {
                slidesPerView: 4,
                spaceBetween: 16
            }
        }
    });
});

これで、スライダーが動作するようになる!

カスタムJSが反映されない・保存できないときは?

以前、別のサイトではページ下部の「カスタムJS欄」に記述することで問題なく動作していました。
しかし、今回自分のサイトで同じように実装しようとしたところ、コードが反映されず、保存しても消えてしまうという現象が発生しました。

カスタムJSが保存できない・反映されない?そんなときの対処法

補足:カスタムJS欄に書いたのに動かない?そんなときは…

SWELLの「カスタムJS」欄に記述しても、うまく動かない・保存してもコードが消えてしまう…
という現象が起きることがあります。

私も今回の実装中にまさにこの状態になりました!

実際に試してみて、考えられた原因
  • <script>タグが入っていると、自動で削除されてしまう(WordPressの仕様)
  • セキュリティ系プラグイン(例:SiteGuard)が保存をブロックしている可能性
  • サーバーのWAF(Webアプリケーションファイアウォール)が干渉している

対策として私が試した方法

JSが反映されないときの対処手順はこちらです

カスタムJS欄に <script> タグ付き、タグなしの両方で試してみました。
でも、コードを書いたら、保存は一瞬できたように見えたのに、再度開いたらコードが消えていた…!

結論

子テーマに custom.js を作成して、JavaScriptをそちらにまとめるようにしたら解決しました!

ページ下部のカスタムJSではなく、custom.js に記述する方法へ切り替え

上記のように「カスタムJS欄」にコードを書いても反映されない場合は、
WordPressの仕様やセキュリティ設定の影響で保存できない可能性があるそうです。

そのため、確実に反映させたい場合は、テーマファイルエディタから「custom.js」ファイルに記述する方法がおすすめです!

手順(簡単に説明)

WordPressの管理画面から
 [外観] → [テーマファイルエディタ] → 子テーマ内の編集

  • functions.php を開いてcustom.js を読み込むコードを記述
  • js/custom.js を開く
  • custom.js 内に JavaScript コードを貼り付け

使うコードはそのままでOK!

コピペコード

// SWELLの投稿スライダー用スクリプト&スタイルを有効化
wp_enqueue_script('swell_swiper');
wp_enqueue_style('swell_swiper');

// custom.js(投稿スライダー初期化など)を読み込む
wp_enqueue_script(
  'custom-js',
  get_stylesheet_directory_uri() . '/js/custom.js',
  [],
  filemtime(get_stylesheet_directory() . '/js/custom.js'),
  true
);

コードの解説:functions.phpに記事スライダー用のコード+JSファイルを読み込む記述

上で紹介した ④ JavaScriptでスライダーを初期化 のコードを、そのまま custom.js に貼り付けるだけでOK!

※ページ下部のカスタムJSではなく、テーマファイルエディタのJSフォルダ > custom.js内にコードを記述

// SWELL投稿スライダーの初期化スクリプト
document.addEventListener('DOMContentLoaded', function () {
    const elmPostListWrap = document.querySelector('.swiper-postListWrap');
    
    if (!elmPostListWrap) return;

    const elmSwiper = elmPostListWrap.firstElementChild;
    if (!elmSwiper) return;

    // クラスの追加(Swiper用の設定)
    elmSwiper.classList.add('swiper-wrapper');
    Array.from(elmSwiper.children).forEach(child => child.classList.add('swiper-slide'));

    // ナビゲーション・ページネーション要素の追加
    ['swiper-pagination', 'swiper-button-prev', 'swiper-button-next'].forEach(className => {
        const element = document.createElement('div');
        element.classList.add(className);
        elmPostListWrap.appendChild(element);
    });

    // Swiperの初期化
    new Swiper('.swiper-postListWrap', {
        loop: true,
        slidesPerView: 1,
        spaceBetween: 16,
        centeredSlides: true,
        speed: 1500,
        autoplay: {
            delay: 5000,
            disableOnInteraction: false
        },
        pagination: {
            el: '.swiper-pagination',
            type: 'bullets',
            clickable: true
        },
        navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev'
        },
        breakpoints: {
            960: {
                slidesPerView: 4,
                spaceBetween: 16
            }
        }
    });
});
関連記事

JSの保存・反映トラブルの原因と、custom.jsを使った解決方法はこちらの記事で詳しく解説しています👇


最後に:本番環境では特に注意!

ローカル環境では正常に動作していたJSが、本番サーバーにアップすると動かなくなることはよくあります。
原因は WordPress の仕様やプラグイン、サーバーのセキュリティ設定などさまざま。
トラブルを回避するためにも、JSの記述はなるべく custom.js にまとめて管理するのが安心です。

まとめ

SWELLの標準機能では「固定ページのみスライダーを表示」することはできません。

  • 子テーマの functions.php にコードを追加
  • 投稿リストブロックでスライダー用の出力を作成
  • CSSでデザイン調整 → JSでスライダーを初期化!

これで、トップページ以外の固定ページや投稿ページでも記事スライダーを表示できるようになります!

ローカルでの検証から本番公開まで、ちょっとしたつまずきもありましたが
custom.js を使えばしっかり動かすことができます!

ありぃ

あなたのページにもスライダーで動きをプラスしてみてくださいね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
ワンクリックで目的地へGO!