東京都府中市、渋谷区のWEB制作会社Maromaroのブログです

2018.06.06

Sasaki

WordPress All in One SEOを使いつつ1発でシェア画像を表示する方法

FacebookやTwitterに投稿した記事をシェアする際、最初のシェアの時に画像が表示されないことありませんか?

実はog:imageにwidthとheightを指定すると改善されるんです!

ですが、利用者の多い All in One SEOでは、自動的にog:image:width、og:image:heightを出力してくれません。

そこで、今回はAll in One SEOを使いつつもog:image:width、og:image:heightを指定するfunction.phpを紹介します。

まず、aiosp_opengraph_metaというフィルターを使います。
ogp関係の出力に関するフィルターで、og:なんたらと出力している部分のフックです。

add_filter( 'aiosp_opengraph_meta', 'ogp_image_width',10,3 );

で、上記フィルターを使い、og:imageを出力している部分をフックします。
上部にある$ogpimage_width_heightは後の別actionで使うためにスコープを外にしています。
下記のfunctionではthumbnailでfacebookの場合(og:imageを出力しようとしている時)に処理を追加し、
og:imageのwidthとheightを取得し、og:image:widthog:image:heightを出力しています。

$ogpimage_width_height ="";
function ogp_image_width($filtered_value, $t, $k){
  if( $k == 'thumbnail' && $t == 'facebook' ){
    global $ogpimage_width_height;
    $image = getimagesize($filtered_value);
    $ogpimage_width_height .= '<meta property="og:image:width" content="'.$image[0].'" />';
    $ogpimage_width_height .= '<meta property="og:image:height" content="'.$image[1].'" />';
  }
  return $filtered_value;
}

最後に、All in One SEOのメタに追加すべく、下記のactionを利用します。
先ほどの$ogpimage_width_heightをglobalで呼び出し、それを出力しているだけです。

add_action( 'aioseop_modules_wp_head', 'add_to_aioseop_head' );
function add_to_aioseop_head(){
  global $ogpimage_width_height;
  echo $ogpimage_width_height;
}

まとめ

まとめますと、function.phpに下記のコードを追加するだけです。

// ogp:imageのwidth、heightを表示
// https://blog.maromaro.co.jp/archives/5860
$ogpimage_width_height ="";
function ogp_image_width($filtered_value, $t, $k){
  if( $k == 'thumbnail' && $t == 'facebook' ){
    global $ogpimage_width_height;
    $image = getimagesize($filtered_value);
    $ogpimage_width_height .= '<meta property="og:image:width" content="'.$image[0].'" />';
    $ogpimage_width_height .= '<meta property="og:image:height" content="'.$image[1].'" />';
  }
  return $filtered_value;
}
add_filter( 'aiosp_opengraph_meta', 'ogp_image_width',10,3 );
add_action( 'aioseop_modules_wp_head', 'add_to_aioseop_head' );
function add_to_aioseop_head(){
  global $ogpimage_width_height;
  echo $ogpimage_width_height;
}

以上です。
うまくいきましたでしょうか!