見出し画像

【Shopify】外部リンクを別タブで開く。メニューの外部リンクもこれで解決!

Shopifyのデフォルトの仕様では、メニューに外部リンクを設定しても別タブには飛びません。そこで、JavaScriptで別タブに飛ぶ仕様にしたいと思います。

はじめに

テーマはデフォルトテーマの「Dawn」を使用します。
※多少のHTML, Liquid, JavaScriptの知識が必要になります。

ゴール

  1. メニューに外部リンクを入れた際に、別タブで開くようにする。

  2. 1と同時にサイト内にある外部リンクを全て別タブで開くようにする。

実装方法

1.aseetsファイルに[custom.js]を作成する。

2.[theme.liquid]の[global.js]が読み込んであるところの下で、[custom.js]を読み込む

<script src="{{ 'custom.js' | asset_url }}" defer="defer"></script>

3.[custom.js]の中身を以下にする。(下記に説明も)

window.addEventListener('DOMContentLoaded', function() {
  const links = document.links;
  const linksLength = links.length;
  for (let i = 0; i < linksLength ; i++) {
    if (links[i].hostname !== window.location.hostname) {
      links[i].target = '_blank';
      links[i].rel = 'noreferrer noopener';
    }
  }
});

4.メニューに外部リンクを設定する。

5.確認

以上5ステップで簡単に終了します。他テーマでも動作確認済みですので、是非使用してみてください!

JavaScript説明

DOMContentLoadedイベント

DOMContentLoadedイベントはHTML解析後の実行なので、全てのリンクを取得するためにこちらのイベントを使用しています。DOMContentLoadedイベントの詳細は以下の記事をご覧ください。
DOMContentLoadedイベント:DOMツリーの構築が完了したとき

変数宣言

const links = document.links;
const linksLength = links.length;

ここで、サイト内にある全てのリンクを取得し、リンクの個数を[linksLength]に代入しています。

for文で1つずつ確認

  for (let i = 0; i < linksLength ; i++) {
    if (links[i].hostname !== window.location.hostname) {
      links[i].target = '_blank';
      links[i].rel = 'noreferrer noopener';
    }
  }

for文で1つずつ確認し、もしリンクのホストネームが現在のホストネームと違ったら、targetに'_blank'を入れ、relに'noreferrer noopener'を入れることによって、別タブに飛ぶようにしています。

target="_blank"と"_new"について

こちらは外せない話題です。
是非こちらのnoteも読んで理解を深めてください。

まとめ

何かご不明点、おかしな点あればご連絡ください。

これ以外にもShopifyテーマのLiquidでのカスタマイズを今後もnoteに投稿していくので、フォローといいねしていただけるとうれしいです。

また、Shopifyの独自のカスタマイズやテーマ開発などのご依頼ございましたら、TwitterのDMよりお待ちしております。

あわせてお読みください

自己紹介

エンジニア経歴

2019.08〜2020.08 カレント自動車株式会社IT事業部インターン
2020.08〜 フリーランスとして数社の業務委託とShopifyエンジニア, Webエンジニアとして活動
2021.08〜 僕と私と株式会社 Shopify事業部責任者
2022.01〜 石垣島に僕と私と株式会社グループのEC制作会社設立 (代表)

その他経歴

2021  電動キックボード日本一周
    雑誌「BICYCLE JAPAN」7月号掲載
    渋谷大型スクリーンCM「SWALLOW」出演

SNS

TikTok
85,000フォロワー(2021.09時点)
主に旅について発信

Instagram
11,000フォロワー(2021.09時点)
主に旅と生活について発信

Twitter
旅とShopifyについて発信

この記事が気に入ったらサポートをしてみませんか?