[2012.10.23追記]
og:imageは複数設定できるので、メンドがくさいことはやめて、あらかじめデフォルト画像と「アクセスが1億倍くらい上がるog:image」を設定するコードを追記しました。
@msngさんが「どうせ(og:imageを)ランダムに出すなら、美女の写真にしておくとアクセスが1億倍ぐらいになります!」とFacebookで書かれていたのを見て
ウホッ!
とばかりに functions.php にブヒブヒ言いながら追記してみました。勢いにまかせてやったネタなので「ご利用は計画的に」の技術情報でご容赦を。
美女の写真は『phpFlickr』を使って、FlickrのAPIをたたいて引っぱってくることにしました。あらかじめFlickrのサイト内にある「The App Garden」にてAPIキーを生成しておきます。
ダウンロードした phpFlickr.php は functions.php と同じ階層に inc というディレクトリをつくり inc/phpFlickr/phpFlickr.php という構造で入れます。
まずは phpFlickr.php で写真のURLを取得してみます。
function my_get_flickr() {
require_once( 'inc/phpFlickr/phpFlickr.php' ); // functions.php を基準にした phpFlickr.php のパス
$flickr = new phpFlickr( 'YOUR_API_KEY' ); // FlickrのAPI Keyを記述
$flickr -> enableCache( // phpFlickr のキャッシュ機能を使用
'db', // データベースにキャッシュデータを格納
'mysql://' . DB_USER . ':' . DB_PASSWORD . '@' . DB_HOST . '/' . DB_NAME // wp-config.php の設定値でデータベースにアクセス
);
$photos = $flickr -> photos_search( array( 'tags' => '美女', 'per_page' => 50, 'privacy_filter' => 1 ) ); // 「美女」というタグがついた一般公開の写真50点を取得
shuffle( $photos['photo'] ); // 取得した画像をシャッフル
$photos['photo'] = array_slice( $photos['photo'], 0, 1 ); // シャッフルした画像の最初の画像を取得
$image = $flickr -> buildPhotoURL( $photos['photo'][0], 'large' ); // サムネイル画像のURLを生成
if ( isset( $image ) ) { $image = preg_replace( "/(_b)(\.jpg|\.png|\.gif)$/", "_q$2", $image ); }
return $image;
}
画像のURLが取得できれば、あとはご随意にOGPまわりの設定を書くだけです。ちなみに私の場合はこんな要領で。
function my_get_ogp() {
global $post;
$name = get_bloginfo( 'name' );
if ( is_home() || is_front_page() ) {
$title = get_bloginfo( 'name' );
}
else {
$title = get_the_title() . ' | ' . get_bloginfo( 'name' );
}
$desc = 'WordPressを愛する自称(高専ウォッチャー|おむつケーキ作家|『福井にHHKBと親指シフトとxkeymacsを普及させよう会』会長)のこそこそブログ。身のまわりの雑事いろいろ。たまに毒吐き。';
$url = get_permalink();
$image = my_get_flickr();
if ( !isset( $image ) || ( get_post_meta( $post -> ID, 'bijo', true ) !== '1' ) ) { // URLが取得できてないとき or カスタムフィールドの「bijo」の値が1でないときはデフォルトの画像に
$image = 'https://www.tecking.org/wordpress/path/to/default.jpg';
}
$str = <<<EOD
<meta property="og:site_name" content="$name" />
<meta property="og:title" content="$title" />
<meta property="og:description" content="$desc" />
<meta property="og:url" content="$url" />
<meta property="og:type" content="article" />
<meta property="og:image" content="$image" />
<meta property="og:locale" content="ja_JP" />
<meta property="fb:app_id" content="YOUR_APP_ID" />
<meta property="fb:admins" content="YOUR_ADMIN_ID" />
EOD;
echo $str;
}
add_action( 'wp_head', 'my_get_ogp' );
のべつまくなしog:imageに美女画像が出てきてアクセス1億倍を目指すのも大人げないので、カスタムフィールド「bijo」をつくって、値が1のときだけ美女画像を出すようにしました。あと、画像のライセンス関係を今回考慮してないので my_get_flickr 関数内の photos_search にライセンスまわりの引数を与えるとベターでしょう。
エッチい写真に「美女」タグがついてることがあるので、ウォールに投稿するまでどんなサムネイルが出てくるかドキドキがとまりません 🙂
[2012.3.29追記]
コードの一部に表記ミスがあったので修正しました(これは細部の編集です)。
[2012.10.23追記]
ということで、og:imageを複数設定しておけるコードです。上記、2番目のコードを以下のようにしました。
function my_get_ogp() {
$name = get_bloginfo( 'name' );
( is_home() | is_front_page() ) ? $title = get_bloginfo( 'name' ) : $title = get_the_title() . ' | ' . get_bloginfo( 'name' );
$desc = 'WordPressを愛する自称(高専ウォッチャー|おむつケーキ作家|『福井にHHKBと親指シフトとxkeymacsを普及させよう会』会長)のこそこそブログ。身のまわりの雑事いろいろ。たまに毒吐き。';
$url = get_permalink();
$image = 'https://www.tecking.org/wordpress/path/to/default.jpg';
$bijo_image = my_get_flickr();
$str = <<<EOD
<meta property="og:site_name" content="$name" />
<meta property="og:title" content="$title" />
<meta property="og:description" content="$desc" />
<meta property="og:url" content="$url" />
<meta property="og:type" content="article" />
<meta property="og:image" content="$image" />
<meta property="og:image" content="$bijo_image" />
<meta property="og:locale" content="ja_JP" />
<meta property="fb:app_id" content="YOUR_APP_ID" />
<meta property="fb:admins" content="YOUR_ADMIN_ID" />
EOD;
return $str;
}
function my_ogp() {
echo my_get_ogp();
}
add_action( 'wp_head', 'my_ogp' );
ちなみに、この記事を書くきっかけをくれた@msngさんが「Facebook にウェブページを再クロールしてもらってキャッシュのリセットと OGP の書式チェックができるブックマークレット」というのを公開してます。妖しげな美女画像が出てきちゃったときの対策として、ブラウザに登録しておくとシアワセになれるかもしれません。
コメントを残す