WordPress未経験でも簡単 各記事に自動でmeta descriptionを設定

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に


<?php wp_head(); ?>

の記述があることが利用の前提となっている。本記事を書く際にはTwenty Thirteenで動作を確認した。

header.phpをカスタマイズする方法でも可能

WordPressのAll in One SEOやheader.phpをカスタマイズすることでも可能ではあるが、All in One SEOのdescriptionの自動生成機能については、日本語文字において文字数の取り方に曲があったので、別の方法を検討していた。