Facebookシェア数を取得するWordPressカスタマイズ方法

2019年4月18日にFacebookの古いAPI(v2.8)のサポートが終了しました。

Graph API Changelog

新しいAPI(v2.9以降)では、Facebookのアクセストークンを取得していないとシェア数を取得できなくなりました。

以下では、その仕様に対応した「WordPressでFacebookシェア数を取得する方法」を備忘録がてら紹介します。

スポンサーリンク
レクタングル(大)広告

主な手順

シェア数を取得する手順としてはこんな感じです。

  1. Facebookアクセストークンを取得する
  2. functions.phpにシェア数取得関数を記入する
  3. シェア数を表示させたいテンプレートにコードを書く

一番面倒くさいところは、コードを書く事ではなく、アクセストークンの取得になるかと思います。

Facebookアクセストークンを取得する

古いFacebook APIの仕様では、特別な設定をせずともシェア数は取得できました。

けれど新しい仕様のFacebook APIでは、アクセストークンの取得が必須になりました。

また、戻り値の格納方法も変更されています。

アクセストークンの取得方法は、以下の方法を参考にしてください。

Facebook for Developersにアプリを作成して、アクセストークンを取得しシェアカウントを取得する方法です。

取得したアクセストークンは、あとでコードを書く際に利用します。

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 APIで戻されるJSON

シェア数を表示させたいテンプレートにコードを書く

あとは、投稿・固定ページで利用されているテンプレートの「Facebookシェア数」を表示させたい箇所に以下のコードを挿入します。

<?php //投稿・固定ページのシェア数を出力
echo fetch_facebook_count(get_permalink()) ?>

上記のコードを挿入する部分は、使用しているテーマによって変わります。ですので、挿入部分に関しては各自で調べていただく必要があります。

動作確認

テンプレート出力コードを挿入し投稿画面を確認してみると、以下のようにシェア数を出力させることが可能です。

シェア数表示の動作確認

まとめ

今回の方法で、Facebookシェア数を出力させることが可能になります。

ただ、アクセストークンを使用した方法であっても、Facebook利用には制限があります。

ですので、実際に利用するには取得したシェア数を一旦キャッシュして、次回シェア数が必要な時は、一定期間キャッシュから呼び出すようにして、APIの負荷を軽減する処理を追加する必要はあるかと思います。

ただ、キャッシュ処理に関しては「Facebookシェア数の取得」という範疇から外れますし、書き込むと多少処理が複雑になるので、今回は触れません。

実装する場合は、それぞれで処理を追加してください。

最も簡単な方法としては、WordPressのget_transientset_transient関数を用いると比較的容易に実装できるかと思います。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

スポンサーリンク