Help us understand the problem. What is going on with this article?

SNS Count Cacheプラグインでhttps化対策

More than 3 years have passed since last update.

SNS Count Cacheプラグインについて

SNS Count Cacheプラグインは、SNS系ボタンを高速に表示させるためのプラグインです。

https://ja.wordpress.org/plugins/sns-count-cache/

SNS Count Cacheプラグインをインストールすると、SNS系ボタンのカウント数を定期的にDBにキャッシュするようになります。
各種SNSボタンのデザインを別途用意し、カウント数を関数で取得させることで高速なボタン表示が可能になります。

SNS Count Cacheプラグインのhttps合算機能

この他にもSNS Count Cacheプラグインには、httpとhttpsを合算して表示する機能があります。

httpで運用しているWordpressサイトをhttps化すると、facebookのいいね!数等のSNS系ボタンのカウント数が0にリセットされてしまいますので、https化の際には是非導入しておきたいプラグインです。

SNS Count Cacheの設定画面で、https化の際に、以下の項目に設定を行います。

1.jpg

設定更新直後は、カウント数が一時的に0になりますが、徐々にキャッシュが始まり、httpとhttpsのカウント数を合算して表示されるようになります。

https化後にプラグインを正しく動作させるために行ったこと

SNS Count Cacheプラグインのバージョン0.9.1を導入し、https化の設定を行いましたが、うまく動作せずカウント数が0のままでした。

(補足すると、管理画面から手動でキャッシュするとhttp分だけキャッシュされました。また、はてなブックマークだけは正しく合算表示されていました)

ソースをデバッグして調査した結果、sns-count-cache.php の1016行目の、以下の設定をコメントアウトすることで、うまく動作しました。

// Pocket and Google+ are excluded from migration target because they are migrated automatically.
$this->scheme_migration_exclude_keys = array(
    //self::REF_SHARE_POCKET,
    //self::REF_SHARE_GPLUS,
    //self::REF_FOLLOW_TWITTER,
    //self::REF_FOLLOW_FACEBOOK,
    //self::REF_FOLLOW_PUSH7,
    //self::REF_FOLLOW_INSTAGRAM
);

SNS Count Cacheプラグインの動作概要

SNS Count Cacheプラグインは、以下のURLでアクセスして、取得したJSONデータからカウント数を取得し、DBにキャッシュします。

httpで稼働していたWordPressサイトをhttps化し、SNS Count Chacheプラグインのhttps設定を行っておくと、自動キャッシュ時に、まずhttpでカウント数を取得した後、httpsでもカウント数を取得しに行きます。

この処理を行っているのが、
class-share-cache-engine.php 72行目のcache関数
になります。

    public function cache( $options = array() ) {
...
        if ( $this->scheme_migration_mode && Common_Util::is_secure_url( $target_url ) ) {
            if ( ! isset( $this->scheme_migration_date ) ) {
                $target_normal_url = Common_Util::get_normal_url( $target_url );
                $target_sns_migrated = $target_sns;

                foreach ( $this->scheme_migration_exclude_keys as $sns ) {
                    unset( $target_sns_migrated[$sns] );
                }
...
                $migrated_data = $this->get_data( $target_sns_migrated, $target_normal_url );
...
                foreach ( $target_sns_migrated as $sns => $active ) {
                    if ( $active && isset( $migrated_data[$sns] ) && is_numeric( $migrated_data[$sns] ) && $migrated_data[$sns] > 0 ){
                        $data[$sns] = $data[$sns] + $migrated_data[$sns];
                    }
                }

            } else {
                if ( isset( $publish_date ) ) {
                    if ( strtotime( $publish_date ) <= strtotime( $this->scheme_migration_date ) ) {
                        $target_normal_url = Common_Util::get_normal_url( $target_url );
                        $target_sns_migrated = $target_sns;

                        foreach ( $this->scheme_migration_exclude_keys as $sns ) {
                            unset( $target_sns_migrated[$sns] );
                        }
...
                        $migrated_data = $this->get_data( $target_sns_migrated, $target_normal_url );
...
                        foreach ( $target_sns_migrated as $sns => $active ) {
                            if ( $active && isset( $migrated_data[$sns] ) && is_numeric( $migrated_data[$sns] ) && $migrated_data[$sns] > 0 ){
                                $data[$sns] = $data[$sns] + $migrated_data[$sns];
                            }
                        }
                    }
                } else {
                    $target_normal_url = Common_Util::get_normal_url( $target_url );
                    $target_sns_migrated = $target_sns;

                    foreach ( $this->scheme_migration_exclude_keys as $sns ) {
                        unset( $target_sns_migrated[$sns] );
                    }
...
                    $migrated_data = $this->get_data( $target_sns_migrated, $target_url );
...
                    foreach ( $target_sns_migrated as $sns => $active ) {
                        if ( $active && isset( $migrated_data[$sns] ) && is_numeric( $migrated_data[$sns] ) && $migrated_data[$sns] > 0 ){
                            $data[$sns] = $data[$sns] + $migrated_data[$sns];
                        }
                    }
                }
            }
...

この関数において、上記でコメントアウトした
$this->scheme_migration_exclude_keys
に該当SNSの値が入っていると、そのSNSについてはhttpsでキャッシュされなくなってしまいます。
(はてなブックマークが正しく合算して表示されていたのは、この中に含まれていなかったからでした)

残った疑問

なぜ、以下のSNSについてはhttpとhttpsの合算処理を除外するのか?

// Pocket and Google+ are excluded from migration target because they are migrated automatically.
$this->scheme_migration_exclude_keys = array(
    self::REF_SHARE_POCKET,
    self::REF_SHARE_GPLUS,
    self::REF_FOLLOW_TWITTER,
    self::REF_FOLLOW_FACEBOOK,
    self::REF_FOLLOW_PUSH7,
    self::REF_FOLLOW_INSTAGRAM
);

Twitterはカウント数を表示しなくなったので、もはや関係ありませんが、PocketとGoogle+については自動的に合算するから必要ない旨のコメントが書いてあります。

しかしながら、例えばGoogle+では以下のURLでカウント数を取得していますが、

https://apis.google.com/_/+1/fastbutton?url=【SNSボタンを設置したURL】

http、httpsでそれぞれ取得して確認したところ、(合算された値ではなく)それぞれのカウント数が取得されたため、やはりmigration対象にしておかないと正しく動作しないと思います。

lancers
テクノロジーで誰もが自分らしく働ける社会をつくる。日本最大級のクラウドソーシング「ランサーズ」を運営
https://www.lancers.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした