以前100ページ以上あるWordPressサイトのリニューアルをした際に、メガメニュー内でいろんな記事のアンカーリンクを設定することがありました。
必要な箇所すべてに見出しを手動で設定するのはあまりに大変すぎる・・・ということで、自動でidを付与することになりました。
その際に利用したコードをメモしておきます。
※実際に利用したコードから、必要最低限を抜き出したものになります。適宜要件に合わせて変更してください。
WordPressの記事の見出しにidを自動で付与するためのコード
functions.phpに下記コードを記述する。
function add_auto_id( $content ) {
$pattern = '/<h([1-6])(?!.*id=).+?>(.+?)<\/h\1>/im';
return preg_replace_callback( $pattern, function( $matches ) {
static $i = 0;
return '<h' . $matches[1] . ' id="autoid-' . $i++ . '">' . $matches[2] . '</h' . $matches[1] . '>';
}, $content );
}
add_filter( 'the_content', 'add_auto_id', 9 );
動作例
変更前:
<h2>見出し1</h2>
<h3 id="custom-id">既存ID付き</h3>
<h4>見出し2</h4>
変更後:
<h2 id="autoid-0">見出し1</h2>
<h3 id="custom-id">既存ID付き</h3>
<h4 id="autoid-1">見出し2</h4>