以前作成した目次を自動生成する目次ショートコードにて「全ての投稿ページに目次を自動で追加したい」とリクエストをもらったので、実装してみました。
最初はプラグイン化して設定ページを設けることも一瞬考えたのですが、ちょっとしたコード(数行)を追加するだけなので、今回はプラグイン化は見送ることにしました。
取りあえず仕様は下記の様にしました。
仕様
- 全ての投稿および固定ページに目次を追加する。
- 配置する位置は、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未満)を指定することに注意してください。