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関数を用いると比較的容易に実装できるかと思います。