WordPressのいいね数キャッシュプラグイン SNS Count Cacheが抱える問題に立ち向かう – 運営堂サイト裏話(2)

WordPressのいいね数キャッシュプラグイン SNS Count Cacheが抱える問題に立ち向かう – 運営堂サイト裏話(2)

2017年9月27日

運営堂さんサイトリニューアルにあたって苦労したところを書き残しておくシリーズの2つ目です。
今回、リニューアル・サーバ移転にあわせて、常時HTTPS化をすることになりました。
森野さんとは、昨年からずっと「折を見てやりましょう」という話をしていたのですが、結局あれもこれも変えたいね、となって今回のリニューアルに至ったわけです。

さて、HTTPS化にあたってよく言われるのが、SNSのシェア数がリセットされてしまうこと。
これの対応について、WordPressの場合だと「SNS Count Cache」というプラグインを使う方法があります。

SNS Count Cache – WordPress プラグイン | WordPress.org 日本語

This plugin gets and caches SNS counts i…
ja.wordpress.org

このプラグインの説明については、検索してもらうと結構な数の記事が出てきますので詳細は割愛しますが、今回導入した目的は以下の2つです。

  1. 定期的にSNSのシェア数を取得し、カスタムフィールドに格納してくれる
    →自作したボタンに数字を表示できる。JSの読み込みが不要になるので表示高速化につながる。
  2. 「HTTPからHTTPSへのスキーム移行モード」というのがあり、HTTP移行前後のシェア数をよしなに合算してくれる

が、一見便利そうで人気もあるこのプラグインも万能ではなく、あまりに変化が早すぎるFacebook側のAPIの仕様変更に追随ができていないという問題があります。
今後のアップデートで変更があるかもしれませんが、2017年9月時点でSNS Count Cache バージョン 0.11.1 が抱える問題にどのように対応したかを記録しておきます。

2019.05.19追記:SNS Count Cache バージョン 1.1.2 にて、下記の問題が解消していることを確認済みです。現在は以下のような対処は必要なくなっているはずです。

問題1. 最新バージョンのFacebook Graph API だと数値が取れないっぽい

このプラグインでFacebookのいいね数(※正確には「いいね」数と「シェア」数の合算)を取得するには、Facebook for developersのページから、アプリIDとapp secretを取得し、入力する必要があります。

Facebok API アプリID取得画面

が、IDとapp secretを入れてもいいね数が0から増えないという問題が発生します。
調査により、プラグインの仕様がGraph API の最新バージョン(2017年9月時点ではv2.10)に対応してないようだ、ということがわかりました。
以前他の案件でも、その時点での最新バージョンだったv2.9を使おうとして、同様の現象になりました。

そのため、過去バージョンのGraph API を使う必要が出てきます。
運営堂さんのサイトでは以前から使っていたv2.4のIDをそのまま使っています。
以前やった他の案件ではたまたま持ってたv2.7のIDを入れて動作させました。
v2.8のIDは持っていなかったので試していませんが、v2.9, v2.10では数値を取得できませんでした。

・・・私は普段からFacebook Graph API を使う案件をいくつもやっていたので過去バージョンのアカウントを用意できたのですが、残念ながら新規で過去バージョンのアカウントを作ることはできません。
ですので、今までGraph API を使ったことのない人がSNS Count Cacheを正しく動作させるには、プラグイン側がアップデート対応してくれるのを待つしかないようです。

※なお、Pocketとはてなブックマークの数値は正しく取れています。
Google+はいつのまにか公式でシェア数表示自体が廃止されているっぽかったのでOFFにしています。
PinterestとLinkedin、代替Twitter APIは使ってないので知りません。

2. 「HTTPからHTTPSへのスキーム移行モード」がFacebookで正しく動作しない

あれだけ期待された「HTTPからHTTPSへのスキーム移行モード」が、残念ながら稼働してくれません。取得できるのは、HTTPS移行後の数値のみ。
※なお、こちらもPocketとはてなブックマークの数値は正しく合算されています。
またFacebookかよ、としか言いようがありません。

ということで、Facebookの数値だけは何らかの方法でバックアップして、自力で合算してやらないといけません。
ここで活躍するのが、前回の記事でもご紹介した「WP CSV Exporter」プラグインと、「Really Simple CSV Importer」プラグインです。

手順

  1. HTTPS移行前、まだHTTPの段階でSNS Count Cacheを回し、全記事のいいね数を取得
  2. WP CSV Exporterプラグインで記事をエクスポート。このとき、最低限必要なのは以下の3項目だけなので、他の項目はチェックを外しておいてもOKです。
    • 投稿ID
    • 投稿タイプ
    • カスタムフィールドの”scc_share_count_facebook” 項目


  3. エクスポートしたCSVファイルを開き、先頭行のフィールド名 “scc_share_count_facebook” を別の名前に変更(今回は “scc_http_count_facebook” に)し、保存
  4. Really Simple CSV Importer で3.のCSVをインポート
  5. PHPテンプレート側で、SNS Count Cacheプラグインが取得した数値と、 “scc_http_count_facebook” フィールドの数値を足し算し、出力
  6. HTTPSへ移行し、SNS Count Cacheの数値取得を待つ

上記の手順で対応しています。
シェア数のエクスポート機能はSNS Count Cacheプラグインにも付いていますが、後からReally Simple CSV Importerでインポートすることを考えると、WP CSV Exporterでやったほうが良いです。

なお、5.のPHPテンプレート側はおおむねこんな感じになってます。
https://gist.github.com/mypacecreator/e8e3cd1bb0e8b30a6b394882a7556bb2

今後もFacebookの仕様変更で急に数値が取れなくなることもあり得ますので、こんな感じでシェア数をDumpして別のカスタムフィールドに格納しておくと、将来何か役に立つことがあるかもしれません。
(念のためPocket, はてなブックマークの数値も保存してあります)