先日、Facebookの仕様が変わりました。
その際、Facebookのエンゲージメントカウントを取得するには、アクセストークンが必要になったと思って以下の記事を書きました。
けれど、アクセストークンを利用せずとも、Facebookのエンゲージメントカウントを取得できる方法があるのをTwitterで教えていただきました。
わいひらさん、こんばんわ。
Facebook API が変更になったのは事実ですけど、おそらくトークンは必要ないですよ。
本家の StackOverflow に回答しておいたので、参考にしてみてください。https://t.co/CQFg8W0cUR
— Taku (@jt_taku) May 12, 2019
ということで以下では、教えてもらった情報を参考に、WordPressでFacebookのエンゲージメントカウント(以下、シェア数)を取得し表示させる方法を紹介します。
目次
主な手順
Facebookのシェア数を表示させるのに必要な主な手順はこちら。
- functions.phpにシェア数取得関数を貼り付ける
- テンプレートにシェア数出力コードを書く
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には、以下のような情報が返されます。
レスポンスコード以外で利用するのはbodyで返されたJSONのみです。
JSONに対してjson_decode処理を施して、オブジェクト化したものがこちら。
JSONオブジェクトないの「$json->{‘og_object’}->{‘engagement’}->{‘count’}」を利用するといった感じです。
参考 API Share count Facebook Graph deprecated? – Stack Overflow
テンプレートにシェア数出力コードを書く
あとは、投稿・固定ページのテンプレートファイル内の「Facebookシェア数」を表示させたい場所に以下のコードを貼り付けるだけです。
<?php //投稿・固定ページのシェア数を出力 echo fetch_facebook_count(get_permalink()) ?>
動作確認
投稿・固定ページの利用イメージはこんな感じ。
まとめ
てっきりFacebookの新仕様で「シェア数を取得するにはアクセストークンが必要なもの」と思い込んでいました。
けれど、こんな手軽な方法があったとは。
今回の方法は、「アクセストークンが必要な方法」と戻り値が違うのでご注意ください。
アクセストークン不要版。
アクセストークン必要版。
「アクセストークン不要版」では、おそらく「アクセストークン必要版」のカウント総計が表示されているのだと思います。
あと注意点として、今回紹介した方法はシェア数のキャッシュ機能は割愛してあります
今回の方法を利用して、APIに負荷をかけるようだと、アクセス制限を受ける恐れもあるので、自前でキャッシュ処理を追加しておくことをおすすめします。
最も簡単な方法としては、WordPressのget_transientやset_transient関数を用いると比較的容易に実装できるかと思います。