WordPressの自作テーマを作成したんだけど、Googleのサイト性能を計測するPageSpeed Insightsでmetaディスクリプションが無いと警告されたので、今回はWordPressのヘッダーにmetaディスクリプションを追加埋め込む処理を作成したので紹介する。
この記事はプラグインなしで対応する方法を紹介しているので上級者向けの内容となっている。
結論:ヘッダーにmetaディスクリプション処理を追加
ヘッダーにmetaディスクリプションを追加する下記処理を作成したのでコピペする。以上。詳細は後半に説明する。
<!-- add meta-tag -->
<?php
// メタディスクリプション用の変数を初期化
$description = "";
if (is_singular()) { // 単一の投稿ページや固定ページの場合
// 投稿の抜粋が設定されている場合はそれを使用
if (!empty($post->post_excerpt)) {
$description = $post->post_excerpt;
// 投稿の抜粋が設定されていない場合は、本文をストリップして30単語に切り詰めたものを使用
} else {
$description = wp_trim_words(strip_tags($post->post_content), 30, '...');
}
} elseif (is_home() || is_front_page()) { // ホームページまたはフロントページの場合
// ブログの説明を使用
$description = get_bloginfo('description');
} elseif (is_category()) { // カテゴリーページの場合
// デフォルト説明文作成
$category = get_queried_object();
$cat_name = $category->name;
$defolt_description = $cat_name . "に関する情報を幅広く提供します。最新のトピックから定番のノウハウ、ユニークな視点まで、" . $cat_name . "についての知識と楽しみを深めるための記事を集めました。" . $cat_name . "に関心のあるすべての人に役立つ情報を日々更新しています。";
// カテゴリーの説明を使用
// カテゴリの説明が取得できない場合はデフォルトの説明文を設定(適宜変更する)
$description = !empty(category_description()) ? category_description() : $defolt_description;
} elseif (is_tag()) { // タグページの場合
// デフォルト説明文作成(適宜変更する)
$tag = get_queried_object();
$tag_name = $tag->name;
$defolt_description = $tag_name . "についての最新情報や詳細なガイド、実用的なアドバイスを提供します。多彩なトピックをカバーし、" . $tag_name . "に関する深い洞察と有用な知識をお届けします。あなたの" . $tag_name . "ライフをさらに充実させるための情報源です。";
// タグの説明を使用
// タグの説明が取得できない場合はデフォルトの説明文を設定
$description = !empty(tag_description()) ? tag_description() : $defolt_description;
} elseif (is_page()) { // 固定ページの場合
// ページの抜粋を30単語に切り詰めたものを使用
$description = wp_trim_words(get_the_excerpt(), 30, '...');
// それ以外のページの場合
} else {
// デフォルトの説明文を使用
$description = "ここにデフォルトの説明文を入力します。";
}
// メタディスクリプションを160文字に切り詰める
$description = mb_substr($description, 0, 160);
?>
<meta name="description" content="<?php echo $description; ?>" />
<!-- End add meta-tag -->
処理の詳細説明
コメントを読めば分かる通り、各ページ(トップページ、記事、カテゴリ、固定ページ)を判別してそれぞれ設定された説明文をmetaタグに埋め込んでいる。
基本的には予め設定した内容をmetaタグに出力するが、これだと設定が無い場合に何も出力されなくなるため、設定されていない場合にも対応している。
単一記事の処理
記事の「抜粋」の内容を出力。「抜粋」が設定されていない場合は記事の冒頭の内容を出力する。
フロントページの処理
フロントページの場合は「外観>カスタマイズ>サイト基本情報>キャッチフレーズ」の内容を出力する。これはWordPressの設定画面で設定できる。
カテゴリ・タグページの処理
カテゴリの「説明」の内容を出力する。これはWordPressの設定画面で設定できる。設定が無い場合はデフォルトの説明文(プログラム埋め込み内容)を出力する。
固定ページの処理
固定ページ編集画面の「抜粋」で設定した内容を30文字に切り詰めて出力する。私のページでは30文字切り詰め設定しているが、サイト独自で設定を変更してもらっても構わない。
また、固定ページの「抜粋」はデフォルトでは出力されていないため、下記処理を「function.php」に追記する。
// ページエディターに抜粋フィールド表示
add_post_type_support( 'page', 'excerpt' );
まとめ
ページ毎にmeta要素を埋め込む処理を作成した。処理は直接ヘッダーに埋め込むようにしているが、function.phpにまとめても良いと思う。適宜対応してもらいたい。
プラグインで対応するのが楽だろうが、プラグインは処理がブラックボックスになっており不要な処理がサイト表示スピードに影響することがあるので必要最小限にしたいものだ。それがオリジナルテーマ作成者の気概ってもんだ。
結局はやるやつはやるし、やらないやつはやらない、ということだ。