SWELLやCocoonなどのWordPressテーマで自動的に作成される目次について、見出しをクリックしても思った場所へ飛ばない場合の対象方法をご紹介します。
目次の作成方法はテーマやプラグインによって異なるので、一概には言えないと思います。
私の場合は、SWELLテーマで、見出しブロックに意図しないアンカーが勝手にできていたのが原因でした。
この記事では、記事に含まれる文字を検索して一括置換できるプラグイン「Search Regex」を使った方法をご紹介します。
目的の見出し(H2、H3)に正しく飛ばない
私の場合、SWELLで、目的の見出し(H2、H3)に正しく飛ばないというトラブルが起きました。
目的の見出しをクリックすると、関係ない場所で止まるという現象です。
SWELLのフォーラムでも同様のトラブルが投稿されていました。
フォーラムでは、SWELLのスムーズスクロールをオフにしたら直ったという投稿がありましたが、私の場合は違っていたようでした。
勝手にアンカーが設定されていたのが原因
調べてみると、トラブルが起きたページでは、見出しの一部に勝手にアンカーが設定されていました。
見出しブロックの「高度な設定」は、自分でアンカーを設定しない限り、空になっているはずですが、以下のようにindex_id1
といったアンカーが設定されていました。
トラブルが起きたページでは、複数箇所にindex_id1
がある場合がありました。
idの数字は、1だけではなく、様々でした。
トラブルの原因は不明
アンカーがなぜ、勝手に設定されたのか、原因は分かりませんでした。
チャットGPTに質問してみると、以下のような回答がありましたが、手動ではアンカーを設定しておらず、目次生成プラグインも導入していないので、「Gutenbergエディターのバグ」「テーマによる自動アンカー生成」の可能性があると思いました。
- 手動で誤った値を入力した場合
投稿やページ編集時に「HTMLアンカー」フィールドに誤って「1」や「#」など不適切な値を入力してしまった可能性があります。 - Gutenbergエディターのバグまたは
一部のプラグインやカスタムスクリプトが、id属性の生成に影響を与えている可能性があります。特に - プラグインの干渉
目次生成プラグインがインストールされている場合、そのプラグインが見出しに対して独自のアンカーIDを付与している可能性があります。目次生成プラグインがインストールされている場合、そのプラグインが見出しに対して独自のアンカーIDを付与している可能性があります。 - テーマやプラグインによる自動アンカー生成
テーマや特定のプラグインが、見出しに自動的にアンカー(id
)を付与している場合があります。このアンカー生成が意図せず働くと、重複や無効な値が設定されることがあります。
また、見出しを含めた複数ブロックのパターンをコピーして、使うことがあるので、その際にアンカー設定されることもあるかもしれないと思いました。
いずれにしても原因は特定できませんでした。
目的の見出しに正しく飛ばないトラブルの対処方法
見出しの数や問題のあるページが少ない場合
どの見出しにアンカーが設定されているかは、各見出しブロックの「高度な設定」で一つひとつ確認するか、コードエディターに切り替えて、index_id
で検索してみると分かります。
見出しの数が少なく、勝手にアンカーが設定されていた箇所が少ない場合は簡単で、「高度な設定」に入っているアンカーを削除して空にするだけです。
見出しの数が多い場合や、問題のあるページが分からない場合
見出しの数が多い場合や、問題のあるページが分からない場合は、見出しを一つひとつ確認するのは難しいです。
そこで、記事に含まれる文字を検索して一括置換できるプラグイン「Search Regex」を使って対応しました。
「Search Regex」は便利なおすすめのプラグインです。公式サイト
Search Regexで文字列を一括変換する方法です。
Search Regexはデータベースの情報を書き換えます。
ここで紹介しているのはSWELLのケースですが、他のテーマでも同様だと思います。
「Search Regex」による一括変換を使った方法の手順
アンカーが設定されている箇所を探す
Search Regexで<h3 class="wp-block-heading" id="index_id
で検索します。
すると、 アンカーが設定だれていれば、検索結果から、id="index_id★"
の★の部分に数字が入っているものが見つかります。(例:id="index_id1"
)
★の部分に様々な数字が入っているものが、検索結果にあるケースもあります。
一括変換する
id="index_id★"
の形で★のところに数字が入っているものを、置換によって削除します。
例:id=”index_id1″ の場合
- 「検索」の欄 →
<h3 class="wp-block-heading" id="index_id1">
- 「置換」の欄 →
<h3 class="wp-block-heading">
まとめ
アンカーが勝手に設定された場合の対応方法についてお伝えしました。
同じようなトラブルについての記載ががネット上で見られますが、様々なケースがあるようで、今回ご紹介した方法では修正されない場合もあるかと思います。