WordPress 全ての投稿ページに目次を追加

以前作成した目次を自動生成する目次ショートコードにて「全ての投稿ページに目次を自動で追加したい」とリクエストをもらったので、実装してみました。

最初はプラグイン化して設定ページを設けることも一瞬考えたのですが、ちょっとしたコード(数行)を追加するだけなので、今回はプラグイン化は見送ることにしました。

取りあえず仕様は下記の様にしました。

仕様

  • 全ての投稿および固定ページに目次を追加する。
  • 配置する位置は、h2 (見出し2)の直前とする。存在しない場合は追加しない。
  • 見出しが3つ以下のページは目次を表示しない。

コード

functions.php などに下記のコードを記述します。

function add_toc_content( $content ) {
	if ( is_single() || is_page() ) {

		$shortcode = '[toc showcount="4"]';

		$pattern = '/<h2.*?>/i';
		if ( preg_match( $pattern, $content, $matches ) ) {
			$content = preg_replace( $pattern, $shortcode . $matches[0], $content, 1 );
		}
	}
	return $content;
}

add_filter( 'the_content', 'add_toc_content', 10 );

add_filter 関数の第3引数(優先度)は、ショートコードが展開される11より前(11未満)を指定することに注意してください。

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。(スパム対策)