Facebookとかにシェアしていただく際にできるだけ意図通りの内容を表示させようと思ったらOGPのマークアップが必要です。
プラグインで解決するのもいいけれど、あまりプラグインは使いたくない。
そんな時にちょっと検索したら先駆者様がいらっしゃいました。
そんな備忘録。
【WordPress】Facebook OGPプラグインの使用を止めて自前で設定したら意図通りの画像で正しくシェアされるようになった 【WordPress】Facebook OGPプラグインの使用を止めて自前で設定したら意図通りの画像で正しくシェアされるようになった僕はこれまで、FacebookのOGPの設定は、「Open Graph Pro」プラグインで行っていました。 …nelog.jp
~前略~
ソースコードだと、このような感じで設定されます。
XHTML
12345678 <metaproperty=“og:type” content=“blog”><metaproperty=“og:description” content=“WEB上から簡単にグラフや図表が作れてしまうサービスをまとめてみました。”><metaproperty=“og:title” content=“手軽にイケてるグラフを作れるWEBサービスいろいろ”><metaproperty=“og:url” content=“http://nelog.jp/graph-web-services”><metaproperty=“og:image” content=“http://nelog.jp/wp-content/uploads/2014/06/WEB.jpg”><metaproperty=“og:site_name” content=“寝ログ”><metaproperty=“fb:admins” content=“100001189801332”><metaproperty=“fb:app_id” content=“626022407455274”>で、そんな役割を果たしているOGPなんですが、僕が使っていたWordpressのプラグイン「Open Graph Pro」では、いろいろと不具合がありました。
~中略~
12345678910111213141516171819202122232425262728293031323334 <!— ここからOGP —><metaproperty=“og:type” content=“blog”><?phpif (is_single()){//単一記事ページの場合if(have_posts()): while(have_posts()): the_post();echo ‘<meta property=”og:description” content=”‘.get_post_meta($post->ID, _aioseop_description, true).‘”>’;echo “\n”;//抜粋を表示endwhile; endif;echo ‘<meta property=”og:title” content=”‘; the_title(); echo ‘”>’;echo “\n”;//単一記事タイトルを表示echo ‘<meta property=”og:url” content=”‘; the_permalink(); echo ‘”>’;echo “\n”;//単一記事URLを表示} else {//単一記事ページページ以外の場合(アーカイブページやホームなど)echo ‘<meta property=”og:description” content=”‘; bloginfo(‘description’); echo ‘”>’;echo “\n”;//「一般設定」管理画面で指定したブログの説明文を表示echo ‘<meta property=”og:title” content=”‘; bloginfo(‘name’); echo ‘”>’;echo “\n”;//「一般設定」管理画面で指定したブログのタイトルを表示echo ‘<meta property=”og:url” content=”‘; bloginfo(‘url’); echo ‘”>’;echo “\n”;//「一般設定」管理画面で指定したブログのURLを表示}$str = $post->post_content;$searchPattern = ‘/<img.*?src=([“\‘])(.+?)\1.*?>/i‘;//投稿にイメージがあるか調べるif (is_single()){//単一記事ページの場合if (has_post_thumbnail()){//投稿にサムネイルがある場合の処理$image_id = get_post_thumbnail_id();$image = wp_get_attachment_image_src( $image_id, ‘full‘);echo ‘<metaproperty=“og:image” content=“‘.$image[0].'”>‘;echo “\n”;} else if ( preg_match( $searchPattern, $str, $imgurl ) && !is_archive()) {//投稿にサムネイルは無いが画像がある場合の処理echo ‘<metaproperty=“og:image” content=“‘.$imgurl[2].'”>‘;echo “\n”;} else {//投稿にサムネイルも画像も無い場合の処理echo ‘<metaproperty=“og:image” content=“画像URL”>‘;echo “\n”;}} else {//単一記事ページページ以外の場合(アーカイブページやホームなど)echo ‘<metaproperty=“og:image” content=“画像URL”>‘;echo “\n”;}?><metaproperty=“og:site_name” content=“<?php bloginfo(‘name’); ?>“><metaproperty=“fb:admins” content=“管理者ID”><metaproperty=“fb:app_id” content=“アプリID”><!— ここまでOGP —>これをお使いのWordpressテーマのheader.phpの<head></head>タグの間に埋め込みます。
~後略~
そもそものお話とか、修正箇所等はお手数ですが上記のサイトを読んでください。
あとは自分でPHPの必要な箇所を修正して、header.phpに挿入してFacebookのSharing Debuggerで動作確認。
以下のように意図通りの表示になれば解決です。
テーマのアップデートに対応できるように別ファイルにして関数呼び出したほうが、後々楽かな。