【WordPress】改ページ対応の目次プラグインを使用してみたら…

Webプログラミング

とあるお仕事で「複数ページに記事が分かれていても、全ページの目次を表示できるようにしたい」という要望があり、Extended Table of Contents (with nextpage support)というプラグインを使ってみることにしました。

ところがこのプラグイン、ちょっと問題がありそのままでは使えないものだったのです。

Extended Table of Contents (with nextpage support)は日本語のみの見出しに非対応

このプラグイン、見出しタグの中身が日本語のみの場合、見出しへのリンクがうまく生成されませんでした。
日本語と英数字の混在だと、対応する見出しへのリンクが生成されるのですが…

日本語のみの見出しに非対応の原因

見出しのidとそのidへのリンクを生成する関数の内部に問題がありました。
下記が問題の部分です。

// extended-table-of-contents-with-nextpage-support/extended-toc.php 532行目
$return = preg_replace("/[^0-9a-zA-Z \-_]+/", "", $return);

正規表現で英数字と-、_以外をなくしているのがわかります。そのため下記のような挙動となります。

・日本語のみ
見出し(hタグの中身) →

・日本語と英数字混在
見出し1a(hタグの中身) → 1a

・英数字
midashi1(hタグの中身) → midashi1

生成された文字列が、目次のリンク(aタグ)のhref内に#{生成された文字列}の形で入るため、日本語のみの場合#だけとなり対応する見出しの位置ではなくページ上部へ飛ぶようになってしまいます。

日本語のみの見出しと改ページに対応するには

Extended Table of Contents (with nextpage support)自体、2年以上アップデートされていないため、別のプラグインをカスタマイズするのが、実例も多くよいかと思います。

Table of Contents Plusを改造してページ分割に対応する方法
 WordPressの記事に目次を生成するプラグインである”Table of Contents Plus”を改…
ページ分割時に全ページ分の目次を出力する(要TOC+) - ぼくにがうりくん。
ページ分割時に、TOC+ の機能を使用して全ページ分の目次を出力する方法。

使えるプラグインだと思ったら思わぬ落とし穴…WordPressのプラグインは種類も多いだけに、うまく使わないと障害の原因になりますね。