この記事では、SNS count cacheを使っているのにFacebookのシェア数が全て0になる問題の解決方法が書かれています。
結論から言いますよ!
Facebookのシェア数が全て0になる人とならない人の違いは、Facebookアプリのバージョンの違いが影響していて、Facebook側での対応は不可。
対応は以下の何れかになります。
- プラグインのソースコードを修正する(プラグインの正式版は0.11.1でバージョンアップは停滞)
- ベータ版(0.11.2 Beta1)を手動インストールする
ベータ版のインストールは手動でFTPアップロードが必要なので、それが嫌な人はコピペで一瞬で終わる正式版のソースコード修正の方が簡単です。
SNS count cach導入の経緯
先日、LuxeritasからCocoonにWordpressテーマを変更しました。
Luxeritasはテーマの管理画面で各記事のSNSシェアのカウント数を一覧で確認できたのですが、Cocoonにはその機能がありません。
CocoonもSNS count cacheというプラグインを入れれば同じことができます。
SNS count cachでFacebookのシェア数が0になる
SNS count cacheプラグインをインストールしてもFacebookのシェア数のカウントが0にしかならない人がいます。
まず、APIのバージョンがv2.8以下であれば、おそらくSNS Count Cache 0.11.1のコードでカウント数が取得できると思います。
しかし、v2.9になるとそれができない。仕様が変わったことで、SNS Count Cache 0.11.1のコードでは対応できないのです。しかもここで頭を悩ませられるのが、Facebookアプリで使用するAPIのバージョンは、前のバージョンを選択できないこと。
v2.9以前のバージョンでアプリを作っていれば古いバージョンを選べるようですが、v2.9でアプリを作ったらv2.9以上しか選択できないようです。
私も最近Facebookアプリを作成したのでv2.9しか選べませんでした。
確かに、Facebookシェア数が常に0になりました。
SNS count cacheプラグインを停止してCocoonのSNSシェアカウント数を表示させると正常に表示されます。
SNS count cachでFacebookのシェア数が0になる対策
以下の記事に完全な修正方法が書かれています。
しかし、私には説明がよく理解できなかった(具体的にどこをどう直せばよいのかわからなかった)ので、同じ記事を参考に修正した方法が記載されている以下の記事を見て修正することにしました。
手順1 : includes/class-scc-share-facebook-strategy.phpを開く
FTPでプラグインをダウンロードして、ローカルで修正して再度アップロードしてもいいです。
FTPが面倒ということであれば、Wordpressの管理画面から修正作業します。
- WordPress管理画面を開く
- プラグイン => プラグインエディターと進む
- 編集するプラグインを選択で
SNS count cacheプラグインを選択 - プラグインファイルで以下のファイルをクリック
includes/class-scc-share-facebook-strategy.phpをクリック - 修正箇所を変更して保存
手順2 : 79行目を変更
変更前
$url = self::DEF_BASE_URL . '?' . http_build_query( $this->query_parameters , '' , '&' );
変更後
$url = self::DEF_BASE_URL . '?id=' . rawurlencode( $this->query_parameters['id']) . '&fields=og_object{engagement},engagement&access_token=' . $this->query_parameters['access_token'];
手順3 : 89行目を変更
変更前
public function extract_count( $content ) {
SCC_Common_Util::log( '[' . __METHOD__ . '] (line='. __LINE__ . ')' );
$count = (int) -1;
if ( isset( $content['data'] ) && empty( $content['error'] ) ) {
$json = json_decode( $content['data'], true );
if ( isset( $json['share']['share_count'] ) && is_numeric( $json['share']['share_count'] ) ) {
$count = (int) $json['share']['share_count'];
} elseif ( isset( $json['id'] ) && ! isset( $json['share']['share_count'] ) ) {
$count = (int) 0;
} else {
$count = (int) -1;
}
} else {
$count = (int) -1;
}
return $count;
}
変更後
public function extract_count( $content ) {
SCC_Common_Util::log( '[' . __METHOD__ . '] (line='. __LINE__ . ')' );
$count = (int) -1;
if ( isset( $content['data'] ) && empty( $content['error'] ) ) {
$json = json_decode( $content['data'], true );
// if ( isset( $json['share']['share_count'] ) && is_numeric( $json['share']['share_count'] ) ) {
// $count = (int) $json['share']['share_count'];
// } elseif ( isset( $json['id'] ) && ! isset( $json['share']['share_count'] ) ) {
// $count = (int) 0;
// } else {
// $count = (int) -1;
// }
$reaction = (int) $json['engagement']['reaction_count'];
$comment_count = (int) $json['engagement']['comment_count'];
$comment_plugin_count = (int) $json['engagement']['comment_plugin_count'];
$share_count = (int) $json['engagement']['share_count'];
$count = $reaction + $comment_count + $comment_plugin_count + $share_count;
} else {
$count = (int) -1;
}
return $count;
}
0.11.2 Beta1のインストール
作者さんのサイトからダウンロードして、ローカルで展開した後にFTPでサーバーにアップロードすれば終わりです。
最初、アップロード時に上書き確認されたので、新しいファイルは上書きとしました。プラグインのバージョンを確認しても変化が無かったので、再度全て上書き更新にしたところ、バージョンが上がったのが確認できました。全て上書き更新にすると設定が消えてしまうのでFacebook アプリのIDなどは入れ直しになりました。
0.11.2 Beta1をインストールしたらFacebookのシェア数の取得ができるようになりました。
まとめ
Cocoonもプラグイン本体でSNSシェアカウントをキャッシュしているので、Luxeritasのように記事毎のSNSシェアカウント数を管理画面で確認できれば良いのですが、その機能は実装されそうな雰囲気はありません。
というのもSNS count cacheプラグインを昔から使っている人はFacebookアプリのバージョンがv2.9より前のバージョンを使っているので問題が起きず、特に困らないからだと思います。