Facebookのシェア数を取得するWordPressカスタマイズ方法(アクセストークン不要版)

先日、Facebookの仕様が変わりました。

その際、Facebookのエンゲージメントカウントを取得するには、アクセストークンが必要になったと思って以下の記事を書きました。

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

けれど、アクセストークンを利用せずとも、Facebookのエンゲージメントカウントを取得できる方法があるのをTwitterで教えていただきました。

ということで以下では、教えてもらった情報を参考に、WordPressでFacebookのエンゲージメントカウント(以下、シェア数)を取得し表示させる方法を紹介します。

実際使用してみたところ、アクセストークンなし版は、かなり使用制限が厳しいためアクセスの多いサイトでは不向きです。出来ればアクセストークン版を実装した方が良いかと思います(※それでも制限が厳しい)。
スポンサーリンク
レクタングル(大)広告

主な手順

Facebookのシェア数を表示させるのに必要な主な手順はこちら。

  1. functions.phpにシェア数取得関数を貼り付ける
  2. テンプレートにシェア数出力コードを書く

2回ほどコピペすれば利用出来るかと思います。

    functions.phpにシェア数取得関数を貼り付ける

    まずはテーマ(子テーマ)のfunctions.phpに以下のコードを貼り付けます。

    //Facebookのエンゲージメントカウントを取得する
    function fetch_facebook_count($url){
      //URLをURLエンコード
      $encoded_url = rawurlencode( $url );
      //Facebookにリクエストを送る
      $request_url = 'https://graph.facebook.com?id='.$encoded_url.'&fields=og_object{engagement}';
      $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->{'og_object'}->{'engagement'}->{'count'}) ? $json->{'og_object'}->{'engagement'}->{'count'} : 0);
      }
      return intval($res);
    }

    関数を簡単に説明しておきます。

    カウントしとくリクエスト用のURLを以下の形式で作成します。

    https://graph.facebook.com?id=エンコードURL&fields=og_object{engagement}

    このURLにアクセスすると、以下のようなJSONの戻り値が帰ります。

    {
       "og_object": {
          "engagement": {
             "count": 162,
             "social_sentence": "162 people like this."
          },
          "id": "1187601844676705"
       },
       "id": "https://wp-cocoon.com/"
    }

    上記のJSONを取得するため、「作成したURL」を引数にwp_remote_getを行って戻り値を取得します。

    ちなみに戻り値となる$responseには、以下のような情報が返されます。

    Facebook APIからの返り値

    レスポンスコード以外で利用するのはbodyで返されたJSONのみです。

    JSONに対してjson_decode処理を施して、オブジェクト化したものがこちら。

    body配列の中身

    JSONオブジェクトないの「$json->{‘og_object’}->{‘engagement’}->{‘count’}」を利用するといった感じです。

    参考 API Share count Facebook Graph deprecated? – Stack Overflow

    テンプレートにシェア数出力コードを書く

    あとは、投稿・固定ページのテンプレートファイル内の「Facebookシェア数」を表示させたい場所に以下のコードを貼り付けるだけです。

    <?php //投稿・固定ページのシェア数を出力
    echo fetch_facebook_count(get_permalink()) ?>
    上記のコードを挿入する部分は、使用しているテーマによって変わります。ですので、挿入部分に関しては各自で調べていただく必要があります。

    動作確認

    投稿・固定ページの利用イメージはこんな感じ。

    Facebookシェア数の表示動作確認

    まとめ

    てっきりFacebookの新仕様で「シェア数を取得するにはアクセストークンが必要なもの」と思い込んでいました。

    けれど、こんな手軽な方法があったとは。

    今回の方法は、「アクセストークンが必要な方法」と戻り値が違うのでご注意ください。

    アクセストークン不要版。

    アクセストークンを利用しないでFacebookエンゲージメントカウントの取得

    アクセストークン必要版。

    アクセストークン必要版

    「アクセストークン不要版」では、おそらく「アクセストークン必要版」のカウント総計が表示されているのだと思います。

    あと注意点として、今回紹介した方法はシェア数のキャッシュ機能は割愛してあります

    今回の方法を利用して、APIに負荷をかけるようだと、アクセス制限を受ける恐れもあるので、自前でキャッシュ処理を追加しておくことをおすすめします。

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