攻めは飛車角銀桂守りは金銀三枚

人生、なすがママ、きゅうりがパパ

WordPressサイトで記事ごとのメタディスクリプションを自力で更新、出力する方法。

SEO的に有利なんでちゃんと書こうねと言われる「メタディスクリプション」。

WordPressサイトでもちゃんと書くようにしているのですが、最近これがちょっと問題。

All in One SEO Packと相性が悪いテーマ

WordPressサイトで有名なSEO対策プラグイン「All in One SEO Pack 」。

これまでずっとこの「All in One SEO Pack 」を使って「メタディスクリプション」を管理してました。

記事ごとに「All in One SEO Pack 」が「メタディスクリプション」を入力するエリアを表示してくれるので、そこに書いてました。

メタディスクリプションってのはこんなのね。
f:id:lightgauge:20180130205156p:plain
Googleなんかで検索されたときにでる記事の説明文。

これをちゃんと書いてればユーザーも興味をもってくれるのんで、クリックして記事をたくさん読んでもらえると。

でも最近WordPressサイトで困ってます。

お気に入りのWordPressテーマ「Luxeritas」と「SANGO」がテーマと相性の悪いプラグインに「All in One SEO Pack」に挙げてます。

これはいかんと思い「All in One SEO Pack」プラグインを停止しました。

するとこれまで入れていた「メタディスクリプション」がソース上出力されなくなりました。

ダメぽん。

PHPのプログラムで自分で「メタディスクリプション」を管理する方法

各テーマにも「メタディスクリプション」を管理する入力エリアがあるんですが、いままで入力してたものを再入力しないといけなかったり、次にWordPressテーマ変えるとまたでなくなったりするかもしれません。

ということで今回は技術者の端くれとして自分でなんとかするぴょん。

でも最初から作るの大変なんでここは「教えて!!Google先生」ということで見つけました。


wordpressで投稿・固定ページごとのdescriptionとkeywordsの設定枠をプラグインなしで設置する方法 | かわたま.net

ここにあるソースは「keywords」タグも出してますが、最近は「Keywords」タグは意味がないらしいので出さないように変更。
seo-top.net

あと、元記事は「hearder.php」に関数の呼び出しを追加する必要があったのですが、WordPressテーマをアップデートすると変更がもとに戻るので、ヘッダー読み込み時にフックされるように改造しました。

//アクションの追加
add_action('admin_menu','add_custom_fields');
add_action('save_post','save_custom_fields');
add_action('wp_head','my_description');

//記事ページと固定ページでカスタムフィールドを表示
function add_custom_fields() {
  add_meta_box('my_sectionid','カスタムフィールド','my_custom_fields', 'post');
  add_meta_box('my_sectionid','カスタムフィールド','my_custom_fields', 'page');
}
//アクションの追加
function my_custom_fields() {
  global $post;
  $description = get_post_meta($post->ID,'description',true);
  echo '<p>ページの説明(description)160文字以内<br>';
  echo '<input type="text" style="width: 600px;height: 40px;" name="description" value="'.esc_html($description).'" maxlength="160" /></p>';
}
// カスタムフィールドの値を保存
function save_custom_fields( $post_id ) {
  if(!empty($_POST['description']))
    update_post_meta($post_id, 'description', $_POST['description'] );
  else delete_post_meta($post_id, 'description');
}
// カスタムフィールドの値をヘッダーに出力
function my_description(){
// カスタムフィールドの値を読み込む
$custom = get_post_custom();
if(!empty( $custom['description'][0])) {
  $description = $custom['description'][0];
}
?>
<meta name="description" content="<?php echo $description ?>">
<?php
}

(全角の「<」「>」は半角に変えてね。)

このコードをfunction.php書くと記事の編集画面に「メタディスクリプション」を入力するエリアが表示され、そこに入力した「メタディスクリプション」が<head>タグの中に出力されます。

わたしは「WordPress画面真っ白攻撃」を受けるのが嫌なんで「Snippet」というプラグインを導入して、そのプラグインで今回のコードを管理・実行しています。


ここまで来るのに約2時間。最近「ちょっとしたこと」でもなんか時間のかかる残念おじさん技術者になってしまいました。

ということで本当はこれを「プラグインにして」と思いましたが、そこまでやる気力がなかったので今回はここまでにしておきます。

きっと誰かが「プラグイン」にしてくれるはず・・・きっと誰かが。
(実際はあと「プラグイン用のコメントヘッダー」書いたらそのまま行けそうな気がしてますが・・・きっと誰かが・・・)

使ってみて、トラブルが起きても責任は取れませんよ。自己責任で。