2011.10.23追記:
ここで解説しているコードには一部間違いがあります。 All in one SEOプラグインにも対応した、完全版はこちらです。
FacebookまわりでホットなOGP。
どんなものかというのはひとまず置いておいて、今回はプラグインを使わずにWordPressに設置する方法について説明します。
プラグインを使う方が楽だけど
簡単にFacebook用OGPを設定できるWordPress用プラグインは、既にリリースされています。
素直にこれを使えばいいと思いますが、Facebookのいつものノリで、いきなり仕様が変わってしまう可能性もあります。
それに、情報をもっと細かく調整したいこともあるかもしれません。
なので、以下のような条件で、エントリー・固定ページの画像も含めてOGPを出力するコードを書いてみました。
- アイキャッチ画像を指定している場合は、そのサムネイルを利用する
- ない場合は、記事中の画像のうち、最初にアップロードしたもののサムネイルを利用する
- それもない場合は、テーマディレクトリに入れた「ogp_default.jpg」ファイルを利用する
1. テーマ用関数を定義する
使用中のテーマの「functions.php」に、以下のコードを貼り付けます。
「add_theme_support」関数を指定して、アイキャッチ画像を必ず有効にしてください。
//アイキャッチ画像を有効にする
add_theme_support('post-thumbnails');
function post_ogp($id) {
$noImg = 'ogp_default.jpg';
//アイキャッチ画像を取得
$eyeImg = wp_get_attachment_image_src( get_post_thumbnail_id(), 'thumbnail');
if ($eyeImg){
//アイキャッチ画像があれば優先
echo $eyeImg[0];
} else {
//エントリーに属する画像を取得
$query = 'post_parent=' . $id . '&post_type=attachment&post_mime_type=image';
$postImg = get_children($query);
if (!empty($postImg)){
//最初にアップロードされた画像IDを取得
$keys = array_keys($postImg);
$num = $keys[sizeOf($keys)-1];
//画像IDからサムネイルを取得
$thumb = wp_get_attachment_image_src($num, 'thumbnail');
echo clean_url($thumb[0]);
} else {
echo get_bloginfo('template_directory') . '/' . $noImg;
}
}
}
- OGPを指定する
METAタグを書いている個所(たいていはheader.phpだと思います)に、以下のコードを貼り付けます。
このとき、最後の行の「fb:app_id」を、事前に登録した管理用のアプリケーションIDに書き換えてください。
追記:
何かおかしいと思ったらソースコードをpre要素にしてなかった;
<?php if(is_single()||is_page()) { ?>
<?php while (have_posts()) : the_post(); ?>
<meta property="og:title" content="<?php the_title(); ?> | <?php bloginfo('name'); ?>" />
<meta property="og:description" content="<?php echo strip_tags(get_the_excerpt()); ?>" />
<meta property="og:url" content="<?php echo clean_url(get_permalink()); ?>" />
<meta property="og:image" content="<?php post_ogp($post->ID); ?>" />
<meta property="og:author" content="<?php the_author(); ?>" />
<?php endwhile; ?>
<?php } else { ?>
<meta property="og:title" content="<?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?>" />
<meta property="og:description" content="<?php bloginfo('description'); ?>" />
<meta property="og:url" content="<?php echo get_bloginfo('url') . $_SERVER['REQUEST_URI']; ?>" />
<meta property="og:image" content="<?php echo get_bloginfo('template_directory') . '/ogp_default.jpg'; ?>" />
<?php } ?>
<meta property="og:site_name" content="<?php bloginfo('name'); ?> | <?php bloginfo('description'); ?>" />
<meta property="og:type" content="blog" />
<meta property="fb:app_id" content="XXXXXXXXXXXXXXX" />
テーマを更新したら、各ページのOGPを確認してみてください。
補足
META内で使っている「$_SERVER[‘REQUEST_URI’]」という変数は、現在サーバーにリクエストを送っている、ドメインを除いたURIを返します。
つまり、WordPressのブログURIを足すと、現在アドレスバーに表示されているURLとなります。
localhostや一般のレンタルサーバーではほぼ問題ないと思いますが、特殊な設置条件だと、ちゃんと結果を返せないかもしれません。
画像関連の関数についてもいろいろ解説したいとこなのですが、本日はこれまで。