商品情報にスキップ
1 1
公開日:2026.03.15

【Horizon】Shopifyのテーマ「Horizon」で閲覧ユーザーの利便性向上のためにメニューにサムネイルを表示する

【Horizon】Shopifyのテーマ「Horizon」で閲覧ユーザーの利便性向上のためにメニューにサムネイルを表示する

用途

  • ナビゲーション管理・編集
詳細を表示する

Horizonテーマのヘッダーメニューで、商品リンクにサムネイル画像を自動表示するカスタマイズです。テーマファイルの編集は不要で、カスタムLiquidセクションにコードを貼り付けるだけで動作します。デスクトップのメガメニューとモバイルのドロワーメニューの両方に対応しています。


デスクトップ(メガメニュー)の表示例

子メニュー(2階層目)は48px、孫メニュー(3階層目)は28pxのサムネイルで階層の違いが視覚的にわかるようにしています。

デスクトップのメガメニューに商品サムネイルが表示されている例


モバイル(ドロワーメニュー)の表示例

モバイルでは孫メニューにインデントを入れ、画像の右端が子メニューと揃うようにしています。

モバイルのドロワーメニューに商品サムネイルが表示されている例


設定方法:ヘッダーグループにカスタムLiquidセクションを追加

テーマエディタで「ヘッダーグループ」にカスタムLiquidセクションを追加し、コードを貼り付けてください。テーマファイル(ベンダーファイル)の編集は一切不要です。

ヘッダーグループにカスタムLiquidセクションを追加してコードを挿入する設定画面


仕組みの解説

このスクリプトは以下の流れで動作します。

  1. ページ読み込み時に header-menu(デスクトップ)と header-drawer(モバイル)内の商品リンク(/products/ を含むURL)を全て取得
  2. 各商品のhandleを抽出し、/products/{handle}.js で商品画像URLを非同期で並列取得
  3. 取得した画像URLをCDNのリサイズ機能で100px幅に変換し、各リンクの先頭に <img> を挿入
  4. MutationObserver でメニューのDOM変更を監視し、変更があれば再挿入


【補足】MutationObserverが必要な理由

Horizonテーマはページ表示速度を最適化するために、ヘッダーセクションでハイドレーション(初回は軽量HTMLを返し、後からSection Rendering APIで完全なHTMLに差し替える処理)を行っています。この差し替えによってJSで挿入した要素が消えるため、DOM変更を監視して再挿入する仕組みが必要です。

Dawnではこの処理は不要でしたが、HorizonでヘッダーやカートドロワーにJSカスタマイズを行う場合は同様の対策が必要になります。


【補足】対応するリンクタイプ

このスクリプトはURL(/products/)で商品リンクを判定しているため、ナビゲーションに設定したリンクが商品ページへのリンクであれば自動的にサムネイルが表示されます。コレクションやブログ記事へのリンクには影響しません。この方法は商品リンクにのみ有効です。


【補足】サムネイルサイズのカスタマイズ

CSS内の .menu-thumbwidth / height を変更すればサイズを調整できます。モバイル孫メニューの margin-left: 16px は子メニューとのサイズ差(48px - 32px)に合わせているため、サイズを変更する場合はこちらも調整してください。


ご購入(すべて¥0です)いただくと、サンプルコードをご覧いただけるようになります。

すでにご購入済みの方はこちらからログインしてください。

サンプルコード

動作検証済テーマ:Horizon 3.4.0

ヘッダーグループにカスタムLiquidセクションを追加してコードを挿入