functions.phpとwp_headアクションフックを利用して動的にdescriptionを挿入する
やり方
WordPressの個別記事にmeta descriptionを自動で挿入する方法。
functions.phpの末尾に以下のコードを追加した。
add_action('wp_head', 'hook_description'); function hook_description() { if( is_single() ) { $id = get_the_ID(); // 現在の記事idを取得 $post = get_post($id); // 記事のオブジェクトを取得 $content = $post->post_content; // 本文取得 $content = str_replace(array("\r\n", "\r", "\n"), '', $content); // 改行の削除 $content = strip_tags($content); // HTMLタグの除去 $description = mb_strimwidth($content, 0, 160, "", "utf-8"); // 記事の先頭から一部を抜粋 $output="<meta name='description' content='".$description."' />"; // メタタグを生成してアウトプット echo $output; } }
コードの冒頭でis_single()を利用して個別記事のページのみに作用するように条件分岐している。そのため、トップページやカテゴリページのmeta descriptionには影響しないようにしている。
その他のテーマ関連ファイルは変更する必要がなく、functions.phpのカスタマイズだけでdescriptionを自動で反映させることが可能。記事の先頭から160文字を抜粋するコードになっているため、各記事の先頭付近をユニークにすることで、メタタグの重複対応を行うことができる。
なお、利用しているテーマのheader.phpに
の記述があることが利用の前提となっている。本記事を書く際にはTwenty Thirteenで動作を確認した。
header.phpをカスタマイズする方法でも可能
WordPressのAll in One SEOやheader.phpをカスタマイズすることでも可能ではあるが、All in One SEOのdescriptionの自動生成機能については、日本語文字において文字数の取り方に曲があったので、別の方法を検討していた。