WordPress: facebookの「いいね」に使われる画像を指定するコード書いた
facebookの「いいね!」ボタンを押したとき、サムネイル画像として使われる画像を指定するWordPress用コードを書いたよ。
「いいね!」ボタン実装の詳細は他を当たってもらうとして、ここではサムネイル画像を指定するプロパティ「og:image」に限って説明します。
コードは個別記事(post)で記述することを前提としているので、インデックスやアーカイブで使用する際は、自分で一工夫して下さい。
機能説明
「いいね」ボタンを押したときに使われる画像は、「Open Graph protocol」の「og:image」プロパティで指定されます。
<meta property="og:image" content="IMAGE_URL"/>
上記"IMAGE_URL"を適切に切り替えれば、個別記事でサムネイルとして使用される画像を指定できると言うことになります。
イメージ画像はPNG、JPEG及びGIFフォーマットが指定可能で、画像サイズは50x50px以上、画角は最大3:1までが推奨されるようです。
手法1:アイキャッチ画像を指定する
WordPress2.9以降で採用されている、アイキャッチ画像(投稿サムネイル画像)をog:imageとして使用します。
WordPressの「画像を追加」機能を利用して画像を貼り付けているなら、この方法がスマートです。
以下のコードを、個別記事のヘッダ部でog:imageを指定している部分と置き換えてください。header.phpに全ヘッダを任せてる人は、is_single()辺りを使って切り分けてね。
<?php if(has_post_thumbnail($post->ID)) { $tid = get_post_thumbnail_id($post->ID); $url = wp_get_attachment_image_src($tid); echo '<meta property="og:image" content="'.$url[0].'"/>'; } else { echo '<meta property="og:image" content="DEFAULT_IMAGE"/>'; } ; ?>
記事にサムネイル画像が指定されていない場合は、「DEFAULT_IMAGE」をサムネイル画像として指定します。
「DEFAULT_IMAGE」には適当なイメージ画像を指定するか、サイトのfavicon.icoを指定するなどしてください。
手法2:記事で最初に出現した画像を指定する
記事本文で最初に現れる画像タグ(img src="hoge")を抽出し、該当画像(hoge)をサムネイルとして指定します。
ウチのブログみたいに、画像をflickrに置いてるようなサイトは、この方法が向いていると思います。
以下のコードを、og:imageを記述している行と置き換えてください。
<?php $str = $post->post_content; $searchPattern = '/<img.*?src=(["\'])(.+?)\1.*?>/i'; if ( preg_match( $searchPattern, $str, $imgurl ) ) { echo '<meta property="og:image" content="'.$imgurl[2].'"/>'; } else { echo '<meta property="og:image" content="DEFAULT_IMAGE"/>'; } ; ?>
画像のURLをブッコ抜く正規表現は良い感じに適当です。あんまり変なHTMLコードを書くと動かないから気をつけてね。
動作確認
コードの記述が終わったら「URLリンター」を使って動作を確認しましょう。
自分のサイトの個別記事URL(ex. https://www.hide10.com/archives/14680 ) を指定すると、そのページがfacebookからどの様に見えるのか確認出来ます。
ここで「情報 – Image」に表示される画像や、「Debug – Data Source」の内容を確認し、自分が意図したように動作しているか確認してください。
質問・要望・指摘事項など
質問・要望・指摘事項などなどあれば、コメント欄に書き込んで頂くか、ツイッター(@hideto)にご連絡ください。
ついでに、この記事の「いいね!」を押すのも忘れずにお願いします :smile:
ディスカッション
コメント一覧
HIDETOさん
はじめまして 横山と申します。
記事を拝見し、私も是非取り入れたいと思い見よう見まねでトライしてみたのでうまく表示されず、
質問させていただきました。
WordPressのヘッダー内に下記のように記述しているのですが、
ID)) 以降を記述すると記事自体が表示されなくなってしまいます。
どこがおかしいのか教えて頂くことはできませんでしょうか?
宜しくお願いします!
ID)) {
$tid = get_post_thumbnail_id($post->ID);
$url = wp_get_attachment_image_src($tid);
echo ”;
}
else {
echo ”;
} ; ?>
ご質問ありがとうございます。
残念ながらコメント欄の制限で、記入頂いた文章が欠けてしまっているように思います。
もし可能なら、 hide10 at hide10.com に、修正したテンプレートファイルを送付してください。at は @ に置き換えてくださいね。
あとは、WordPressのバージョンが2.9以降であるか?
‘>’が’>’などに置き換わっていないか、など確認してみてください。
御親切にありがとうございます!今メールを送らせていただきました!!!
残念ながら、私のアドレスに届いていないようです。
再度宛先をご確認くださいませ。
このWordPress用コードというのは、普通のコードと違うのでしょうか?
MacでGo Liveを使っているのですが、フェイスブックのいいねボタン用のサムネイルを指定したく、
ページのヘッダに
(IMAGE_URLにはイメージのパスを入れました)
を入れてみたのですが、やっぱり別のイメージが表示されます。
うまく出るまでに時間がかかるとも思えませんので、
やはりこれはGo Live では使えないということでしょうか?
Go Liveのヘッダにmetaなんとかっていう他のコードがあるので、いけるかと思ったのですが。
もしもご存知でしたらGo Liveでも使えるコードをお教えいただけませんか?
ここで提示しているのはPHPというプログラム用コードです。
GoLiveなど一般的なオーサリングツールを使用されるのでしたら、
ご自分でmetaタグを埋め込む必要があると思います。
詳細は開発ドキュメントをお読み頂くか、「OGP」でググってみてください。
https://developers.facebook.com/docs/opengraph/
ありがとうございます。
このリンクなど参照してみます。
ソースコードに関してはあまり知識がないのですが、
hide10さんのこのサイトのおかげで
少しとっかかりができたので感謝しています。