WordPressブログにプラグインを使わないでOGPを設定してみた

WordPressには便利なOGP対応プラグインがあるらしいですが、プラグインを使わない方法を試してみました。
対象は、このブログです。

次の点が、今回の作業の主なポイントです。

個別記事には、それぞれ独自(URL、記事タイトル、説明文、画像など)の設定する
個別記事とそれ以外を振り分ける
アイキャッチ画像は設定していないし、画像のない記事もある
記事内の1枚目の画像を取得、無ければデフォルトの画像を表示させる
テンプレートファイルの改造をなるべく簡単に
PHPとか、サーバとか、参考書やネットの記事を読んでも、完全に理解できていないから危険

最初は、次の記事を参考に始めたのですが、失敗。
functions.php での絶対パス指定が間違っていたのだと思います。

次に参考にしたのは、こちらの記事。
基本のソースは、こちらを参考にさせて頂きました。
しかし、画像が無いページはどうすりゃいいんだ?と。

投稿の最初の画像を取得して、無ければ設定したデフォルト画像を表示させる方法を探しました。
見つけたのが、次の記事。
記事のままでは何故かうまくいかず、「参照元」となっている英文記事を参考にしたら、思い通りになりました。

さらに次の記事を参考に、localeプロパティを追加。
アプリIDを取得しようとしたのに、画面遷移せず、FacebookユーザIDを設定。
と、何度もつまづきながらの作業でした。

最終的なソース例は、こちら。
使っているテーマにもよるとは思いますが、参考になれば。
投稿に画像がなかった場合、投稿以外のページの場合のデフォルト画像を default.jpgとしています。

function.php に画像URL取得のソースを追加
function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){ //Defines a default image
    $first_img = "/ogp_hint.jpg";
  }
  return $first_img;
}
html要素にxmlns属性を追加(header.php)
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml" />
ヘッダにOGPのタグを追加(header.php)
<!-- ↓Facebook OGP -->
<?php
    global $post;     // 記事情報を取得
    setup_postdata($post);

if ( is_single()) {   //single.phpのとき
    ?>
    <meta property="og:title" content="<?php the_title(); ?>" />
    <meta property="og:type" content="article" />
    <meta property="og:url" content="<?php the_permalink() ?>" />
    <meta property="og:description" content="<?php the_excerpt_rss(); ?>" />
    <meta property="og:site_name" content="<?php bloginfo('name'); ?>" />
    <meta property="og:image" content="<?php bloginfo('url'); ?><?php echo catch_that_image() ?>" />
    <meta property="fb:app_id" content="xxxxxxxxxx" />
    <meta property="og:locale" content="ja_JP" />

<?php }else{   //single.php以外
    ?>
    <meta property="og:title" content="<?php bloginfo('name'); ?>" />
    <meta property="og:type" content="blog" />
    <meta property="og:url" content="<?php bloginfo('url'); ?>/" />
    <meta property="og:site_name" content="<?php bloginfo('name'); ?>" />
    <meta property="og:description" content="<?php bloginfo('description'); ?>" />
    <meta property="og:image" content="<?php bloginfo('url'); ?>/ogp_hint.jpg" />
    <meta property="fb:app_id" content="xxxxxxxxxx" />
    <meta property="og:locale" content="ja_JP" />
<?php } ?>
<!-- ↑Facebook OGP -->

誰も「いいね」してくれなきゃ、意味は無いんですけどね。

アプリID取得画面に移動できたので、上記ソースをアプリID版に変更しました。
また、デバッガーでエラーを見つけたので、下記部分を修正しました。(/を追加)

<meta property="og:url" content="<?php bloginfo('url'); ?>/" />

ドメインのトップページにもOGPを設定しました。
自分で「いいね」してみたし、アプリIDも取得したけれど、Facebookインサイトがゼロのまま。
インサイトのページにも、何も表示されません。

そういえば、アラートメッセージが出てました。
でも、英語でよー分からん。
ドメイン単位っぽいので、対象ドメインのトップページにもOGPを設定してみました。
すると、インサイトにも表示されました。

ソースを見なおしてみると、html要素にxmlns属性を追加はしてません。
og:typeは、website にしました。
<meta property=”fb:app_id” content=”xxxxxxxxxx”> 追加だけでも良かったのかも。
これでなんとか、ちゃんと出来たかも。

自分的リンクまとめ

WordPressブログにプラグインを使わないでOGPを設定してみた” への2件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>