WORDPRESS

【SWELL】ページ内リンクをタップした際に、スマホ用開閉メニューが閉じない時の対応

Shinpei Okada

WordPressテーマ「SWELL」のスマホ用の開閉メニューは、リンクをタップ(クリック)すると、自動的にメニューが閉じる仕様になっている。しかし、メニューにページ内リンクが設定されていると、タップしてもメニューが閉じない場合がある。jQueryで簡単に修正できるので参考になれば幸いだ。

INDEX

グローバルナビやSPメニューにページ内リンクを設定する

例えばLP型のサイトで、グローバルナビゲーションメニューのほとんどはトップページ内のコンテンツへのリンク(ページ内リンク)だが、一部プライバシーポリシーや問い合わせフォーム等を別ページにしているケースが該当する。

カスタムリンク:#contents1

カスタムリンクで「#コンテンツID(HTMLアンカー)」を入力すると、メニューにページ内リンクを設定することができる。

この場合、トップページを閲覧中にクリックする分には問題ないが、その他のページでクリックすると機能しない。

他のページからトップページ内のコンテンツへリンクするには、カスタムリンクの頭に「/(スラッシュ)」をつけてルート相対パスを利用するか、http〜の絶対パスを指定する等してトップページを明示する必要がある。

カスタムリンク:/#contents1

こうすることで、他のページからトップページ内のコンテンツ(ページ内リンク)が機能するようになる。一方で、SWELLのスマホ用開閉メニューで当該リンクをクリックしても閉じなくなる。

SWELLのSPメニューの開閉をコントロールする

SWELLのスマホ用開閉メニューは、html要素のdata-spmenu属性で開閉をコントロールしている。data-spmenuがopenedで開いてclosedで閉じる。つまり、リンクをクリックした際に、data-spmenuをclosedにすることでメニューを閉じることができる。

jQueryでリンクのクリック時にdata-spmenuをclosedにする

jQuery(function($){
  $('#sp_menu a[href*="#"]').on('click', function() {  
    $('html').attr('data-spmenu','closed');
  });
});

カスタムCSS&JSの「JS用コード」に記載する。
なおjQueryを使用する場合は、SWELL設定でjQueryの読み込みを有効化(チェック)しておくこと。

data()メソッドではDOMの要素は変更されないので注意

jQuery(function($){
  $('#sp_menu a[href*="#"]').on('click', function() {  
    $('html').data('spmenu','closed');
    console.log($('html').data('spmenu'));
  });
});

data属性の変更なのでdata()メソッドでもいけそうな気がするが、data()はjQuery上のキャッシュを書き換えるのみでHTMLは変更されない。上記のコードの場合、console上はdata-spmenuがclosedになるが、HTMLはopenedのままになる。DOMの要素を書き換える必要がある場合は、attr()メソッドを使う。

この記事はどうでしたか?

ひとことメッセージを送る(匿名)
  • URLをコピーしました!

CONSULTATION

機能の追加・業務効率化・見た目や動線の改善——「もっと楽に更新したい」もご相談ください。

プラグインの導入や移行だけでなく、申込の自動処理・一括登録などの機能追加、更新の手間を減らす仕組み、UI・動線の改善、AI 検索対策、スポット修正まで。「作り直すほどではないが、何とかしたい」段階で構いません。今のサイトの URL を添えてご相談ください。

相談してみる

この記事を書いた人

合同会社LOFIR 代表 / エンジニア。中学生のころ、HTML を手打ちしてホームページを作り、検索ロボットが巡回してくれる前の——Yahoo! に電話帳のように「登録申請」していた時代から Web に関わってきました。以来、メディア運営、コンサルティング、システム開発、制作チームのマネジメントを経て、2022 年に合同会社 LOFIR を設立。いまは中小企業の Web 制作・コンテンツ SEO・AI 導入支援を、自社開発の AI ワークフロー基盤「MIMIR」(n8n × Notion × 各社 LLM・40 以上の機能を 365 日稼働)と Claude Code で回しながら手がけています。このブログには、実際に手を動かして分かったことだけを書いています。

INDEX