
2019年4月18日にFacebookの古いAPI(v2.8)のサポートが終了しました。
新しいAPI(v2.9以降)では、Facebookのアクセストークンを取得していないとシェア数を取得できなくなりました。
以下では、その仕様に対応した「WordPressでFacebookシェア数を取得する方法」を備忘録がてら紹介します。
目次
主な手順

シェア数を取得する手順としてはこんな感じです。
- Facebookアクセストークンを取得する
- functions.phpにシェア数取得関数を記入する
- シェア数を表示させたいテンプレートにコードを書く
一番面倒くさいところは、コードを書く事ではなく、アクセストークンの取得になるかと思います。
Facebookアクセストークンを取得する
古いFacebook APIの仕様では、特別な設定をせずともシェア数は取得できました。
けれど新しい仕様のFacebook APIでは、アクセストークンの取得が必須になりました。
また、戻り値の格納方法も変更されています。
アクセストークンの取得方法は、以下の方法を参考にしてください。
取得したアクセストークンは、あとでコードを書く際に利用します。
functions.phpにシェア数取得関数を記入する
まずはテーマ(子テーマ)のfunctions.phpに以下のコードを貼り付けます。
function fetch_facebook_count($url){
//アクセストークンの入力
$access_token = '取得したアクセストークンを入力';
//URLをURLエンコード
$encoded_url = rawurlencode( $url );
//Facebookにリクエストを送る
$request_url = 'https://graph.facebook.com/?id='.$encoded_url.'&fields=engagement&access_token='.$access_token;
$response = wp_remote_get( $request_url );
$res = 0;
//取得に成功した場合
if (!is_wp_error( $response ) && $response["response"]["code"] === 200) {
$body = $response['body'];
//ジェイソンオブジェクトに変換する
$json = json_decode( $body );
//リアクションカウントをシェア数として取得する
$res = (isset($json->{'engagement'}->{'reaction_count'}) ? $json->{'engagement'}->{'reaction_count'} : 0);
}
return intval($res);
}
貼り付け後、以下の部分に取得したアクセストークンを入力してください。
//アクセストークンの入力 $access_token = '取得したアクセストークンを入力';
新しいFacebook APIは戻り値が変わりました。
今回の関数ではシェア数として「リアクションカウント」を採用しました。
シェア数を表示させたいテンプレートにコードを書く
あとは、投稿・固定ページで利用されているテンプレートの「Facebookシェア数」を表示させたい箇所に以下のコードを挿入します。
<?php //投稿・固定ページのシェア数を出力 echo fetch_facebook_count(get_permalink()) ?>
上記のコードを挿入する部分は、使用しているテーマによって変わります。ですので、挿入部分に関しては各自で調べていただく必要があります。
動作確認
テンプレート出力コードを挿入し投稿画面を確認してみると、以下のようにシェア数を出力させることが可能です。
まとめ
今回の方法で、Facebookシェア数を出力させることが可能になります。
ただ、アクセストークンを使用した方法であっても、Facebook利用には制限があります。
ですので、実際に利用するには取得したシェア数を一旦キャッシュして、次回シェア数が必要な時は、一定期間キャッシュから呼び出すようにして、APIの負荷を軽減する処理を追加する必要はあるかと思います。
ただ、キャッシュ処理に関しては「Facebookシェア数の取得」という範疇から外れますし、書き込むと多少処理が複雑になるので、今回は触れません。
実装する場合は、それぞれで処理を追加してください。
最も簡単な方法としては、WordPressのget_transientやset_transient関数を用いると比較的容易に実装できるかと思います。

