WordPressプラグイン「Reaction Buttons」のCookieによる二重投稿防止が効かない場合の対処

「Reaction Buttons」という非常に便利なWordpressプラグインを見つけたんですが、Cookieによる二重投稿防止が効かないといったバグがあったので、問題点と解決策をまとめておきます。

独自のリアクションボタンを設置できるプラグイン

Facebookだと、「いいね!」っていうリアクションボタンがありますが、ブログにも独自のリアクションボタンが欲しい時ってありますよね?

自分の場合、「参考になりましたか?」という質問に対して、「はい」と「いいえ」というリアクションボタンを設置していたりします。(別の運営サイトですが)

そういう時に便利なのが「Reaction Buttons」というWordpressプラグインです。

何回も投稿できないように

同じ人が何回もリアクションを投稿できないように、このプラグインにはCookieを使用して二重投稿を防止する機能があります。

Use cookies: □ Use cookies to make it harder to vote twice? (Only if ‘Use as counters’ is disabled)

これにチェックを入れても正常に動作しません。「Reaction Buttons」導入をオススメしているブログでもこの事には一切触れていないので、自分だけかなぁと思いながら、「Reaction Buttons」のソースコードを拝見したのですが、やはり大事な部分にバグがありました。

site_url()じゃなくてhome_url()

[設定]-[一般]でWordpressアドレスとサイトアドレスが違うブログ、Wordpressを/wordpressといった具合にフォルダで管理している人は、自分と同じ現象に遭遇しているはずです。

/wp-content/plugins/reaction-buttons/reaction_buttons.phpの561行目を御覧ください。

$cookie_path_pos = strpos(site_url("", "http"), "/", 8);
$cookie_path = $cookie_path_pos ? substr(site_url("", "http"), $cookie_path_pos) : "/";

WordPress関数のsite_url()はサイトアドレスのURLを返すわけではなくて、Wordpressアドレス、つまりWordpressファイルが格納されている場所が返されます。

これだと正しくCookieが取得できないので、下記のように書き換えます。

$cookie_path_pos = strpos(home_url("", "http"), "/", 8);
$cookie_path = $cookie_path_pos ? substr(home_url("", "http"), $cookie_path_pos) : "/";

site_url()をhome_url()に変更しました。

これで問題解決です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です