錦カスタマイズ(4) プラグイン無しでOGP/Twitter Cardを設定する

以前はNishiki専用のプラグイン「Nishiki GB」の有料オプション「Nishiki GB Meta」を導入すれば無料版でもOGPを実装できたのですが、Pro版の販売開始に伴いプラグインの販売が終了。

代替策はOGPを実装出来る機能がついたSEO対策プラグイン(1)を導入するか、function.phpに出力変数を書いて自力実装するか、Pro版に乗り換えるかしかありません。

ここではプラグイン無しで実装する方法でやってみます。

WordPressのfunctions.phpを編集する前は、編集前に必ずバックアップを取って保存してください。もし編集後、エラーが出るようでしたら、バックアップファイルを元に復元してください。

function.phpの編集に不安がある方はPro版の導入をおすすめします。

それ以前にOGPとはなんぞや?

Open Graph Protocolの略で、簡単に言うとtwitterやFacebookなどのSNS媒体に投稿された時に、TL上で「どのような見栄えで表示させるか」を指定できる規格のこと。SNSでシェアされた時に、ページのタイトル、URL、概要、画像(サムネイル)を正しく伝えるために<meta>としてHTMLに記述します。基本的な記述としては以下。

<html lang="ja" prefix="og: http://ogp.me/ns#">
<head>
<meta property="og:url" content="ページのURL" />
<meta property="og:title" content="ページのタイトル" />
<meta property="og:type" content="ページのタイプ">
<meta property="og:description" content="記事の抜粋(設定されていない場合は本文の抜粋)" />
<meta property="og:image" content="画像のURL" />
<meta name="twitter:card" content="twitterカードの種類" />
<meta name="twitter:site" content="@Twitterユーザー名" />
<meta property="og:site_name" content="サイト名" />
<meta property="og:locale" content="ja_JP" />

Nishikiの場合、以前は有料プラグインで実装する形だったため、実は無料版でもOGPを使うための宣言prefix="og: http://ogp.me/ns#"がhtml要素に予め挿入されています。ただ今後のアップデートで無料版から削除される可能性も否定出来ないため、もし無かった場合はparts/header/meta.phpにあるhtml要素を以下の様に書き換えてください。

<html prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#" <?php language_attributes(); ?>>

実際に実装してみる

function.phpに以下を追加。ソースコードはサルワカさんで公開されているものを拝借させていただきましたが、自分がやっていないのもあり、Facebook用の設定は省きました。

/*********************
OGPタグ/Twitterカード設定を出力
*********************/
function my_meta_ogp() {
  if( is_front_page() || is_home() || is_singular() ){
    global $post;
    $ogp_title = '';
    $ogp_descr = '';
    $ogp_url = '';
    $ogp_img = '';
    $insert = '';

    if( is_singular() ) {   //記事&固定ページ
       setup_postdata($post);
       $ogp_title = $post->post_title;
       $ogp_descr = mb_substr(get_the_excerpt(), 0, 100);
       $ogp_url = get_permalink();
       wp_reset_postdata();
    } elseif ( is_front_page() || is_home() ) {   //トップページ
       $ogp_title = get_bloginfo('name');
       $ogp_descr = get_bloginfo('description');
       $ogp_url = home_url();
    }

    //og:type
    $ogp_type = ( is_front_page() || is_home() ) ? 'website' : 'article';

    //og:image
    if ( is_singular() && has_post_thumbnail() ) {
       $ps_thumb = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full');
       $ogp_img = $ps_thumb[0];
    } else {
     $ogp_img = home_url() . '/common/img/ogp.png';  //TOPページ&アイキャッチ画像がないときにこの画像を表示
    }

    //出力するOGPタグをまとめる
    $insert .= '<meta property="og:title" content="'.esc_attr($ogp_title).'" />' . "\n";
    $insert .= '<meta property="og:description" content="'.esc_attr($ogp_descr).'" />' . "\n";
    $insert .= '<meta property="og:type" content="'.$ogp_type.'" />' . "\n";
    $insert .= '<meta property="og:url" content="'.esc_url($ogp_url).'" />' . "\n";
    $insert .= '<meta property="og:image" content="'.esc_url($ogp_img).'" />' . "\n";
    $insert .= '<meta property="og:site_name" content="'.esc_attr(get_bloginfo('name')).'" />' . "\n";
    $insert .= '<meta name="twitter:card" content="summary_large_image" />' . "\n";
    $insert .= '<meta name="twitter:site" content="@twitterのアカウントID" />' . "\n";
    $insert .= '<meta property="og:locale" content="ja_JP" />' . "\n";


    echo $insert;
  }
} //END my_meta_ogp

add_action('wp_head','my_meta_ogp');  //headにOGPを出力

これでOGP/Twitter Cardを出力するためのタグが<head>内に出力されるようになりますが、このままじゃ動かないです。実際に動かすには2箇所書き換えが必要です。

33行目: TOPページ&アイキャッチ画像がない時の代替画像のURI(またはパス)

アイキャッチ画像を設定していなかった場合に、代わりに呼び出す画像のURI、またはパスを指定します。メディアライブラリにあげた代替画像のURIをコピペするのが一番楽ですが、同人サイトの場合はバナーを用意している事がほとんどではないかと思うので、代替画像をバナーと同じ場所に置いて、そこから呼び出す方がURIが短くなってよいかと。

上のコードの場合はテンプレート関数を使ってますが、フルパス(URI)で書く場合は下記の様にします。

$ogp_img = 'https://la-lune.org/common/img/ogp.png';

44行目: twitterアカウントID

content=""の中にアカウント名(ユーザーID)を@付きで記述します。

OGP/Twitter Cardがちゃんと設定されたか確認してみる

設定し終えたらデバッガーで確認してみましょう。なお、利用するには各アカウントにログインする必要があります。

Twitter Cardの場合

設定されているか確認したい場合はCard Validatorを利用します。

Card Validator

調べたいページのURIを入力して「Preview Card」をクリック。上の画像の様に表示されていればOKです。

OGPの場合

OGPも同様に、facebookのシェアデバッガーで動作確認します。Twitter Cardと同様に、URIをクリックして「デバッグ」をクリックすると確認することが出来ます。このサイトではfacebookの設定を省いたので、今回は確認しません。

仕舞いじゃ!

っちゅーわけで実際に出した例がこちらですだよ!

この設定をしておくとサイトの更新のお知らせをtwitterに告知した時に、TLを見ている人の目に止まりやすくなります。…ただまあ鍵付きアカウントの場合は色んな理由から「そっとしておいてくれ!」である場合が多いので、サイト持っててもtwitterアカウントに鍵つけてる方は無理に設定しないほうがいいですね。

  1. 代表的なものだとYoast SEOとかAll in One SEO Packとか。しかしどちらも重いことに定評のあるプラグインの筆頭なので、ただ単にOGP/Twitter Cardを設定したいだけならプラグイン無しで実装した方がサイトには優しい
タイトルとURLをコピーしました