当サイトの一部ページには、アフィリエイト・アドセンス・アソシエイト・プロモーション広告を掲載しています。

Amazonのアソシエイトとして、Security Akademeiaは適格販売により収入を得ています。

広告配信等の詳細については、プライバシーポリシーページに掲載しています。

消費者庁が、2023年10月1日から施行する景品表示法の規制対象(通称:ステマ規制)にならないよう、配慮して記事を作成しています。もし問題の表現がありましたら、問い合わせページよりご連絡ください。

参考:令和5年10月1日からステルスマーケティングは景品表示法違反となります。 | 消費者庁

WP ULikeプラグインのunlikeログを抑制する【WordPress編】

WordPress の記事に「いいね」機能を付けるため、当サイトでは WP ULikeプラグイン(記事の上部にあるハートマークを表示・管理)を使用しています。
読者の反応を可視化するという点では便利なプラグインですが、運用しているうちに使用の一部に気になる点がありました。
それは、「いいね取り消し(unlike)」の履歴もEngagement Logsに残り続けることです。

検証環境

本記事で述べる内容は、以下の環境で確認したものです。

  • WordPress:6.9
  • テーマ:Luxeritas 3.23.2 + Luxeritas Child Theme 3.0.3
  • プラグイン:WP ULike 4.8.2(無料版)

※バージョン番号は、ご自身の環境に合わせて読み替えてください。

unlikeログを消したかった動機

読者が記事に「いいね」をつけてくれた場合、WP ULikeプラグインのEngagement Logs画面にてlikeログとして確認できます。

しかし、読者が「いいね⇒いいね取り消し」した場合、Engagement Logs画面にてunlikeログのみとして残ってしまうのです。

管理者側からは「いいね取り消し」の意図判断できません。読者が誤ってつけた「いいね」をすぐに取り消しただけかもしれませんし、ハートボタンの挙動をテストしただけかもしれません。

とはいえ、unlikeログが残っていると気になってしまいます。「読む前に『いいね』をつけてくれたのに、読んでみたら期待外れだったから取り消したのでは……」などと考えてしまい、ちょっとテンションが下がっていました。

そこで、「最終状態だけをログに残せば読みやすくなるのでは?」という素朴な動機から、「unlikeログだけを隠したい/消したい」という方向に発想が向かいました。

ここから今回の検証が始まります。

【試行1】DBからunlikeレコードだけ削除する

最初は、「いいね取り消し」のタイミングでDBの「status = 'unlike’」を削除する方法を試みました。

しかし、結論としてはうまくいきませんでした。

「いいね → 取り消し → 再いいね」と操作すると、最後の「いいね」がログとして残らないという状態が発生しました。

WP ULikeは内部でログの更新・追加を行っているようですが、内部実装を外から完全に把握できない以上、こちらの削除処理と衝突した可能性があります。

少なくとも、「unlikeだけ削除したつもりが、必要なlikeまで消える」という望ましくない結果になったため、DBを触る方法は断念しました。

なお、この時点ではプラグインのソースコードまでは読み込まず、外部から確認できる範囲で検証しました。

【試行2】CSSとJavaScriptで管理画面の「unlike行だけ」非表示にする

次に、ログ自体は残したまま、Engagement Logs画面に表示されるunlike行だけを隠す方法を検討しました。

CSSは効かず

WP ULikeの「カスタムCSS」はフロント側のみに適用されるため、管理画面(wp-admin)には反映されません。

また、ログ一覧のHTML構造を見ると、「bg-gray-50 dark:bg-gray-700」といったTailwind CSSのユーティリティクラスが使われており、React+Tailwindでの実装であることがわかります。

like行もunlike行も同じクラス・同じ構造で、CSSのセレクタでは区別できませんでした。

JavaScript による隠蔽も安定動作せず

管理画面に JavaScript を埋め込み、ステータス列が “unlike" の行だけ「display:none」にするスクリプトを書きました。

しかし、WP ULikeのログ画面は、ページ読み込み後に内部のJavaScriptでテーブルを描画する仕組みを採用しており、うまくいきませんでした。

WP ULikeのログ画面(Stats Panel)は、バージョン4.7.0以降Reactベースで実装されています(Changelogに"Added: Launched an advanced, React-based statistics panel."と明記)。ReactはVirtual DOMを使用し、ページロード後にデータを非同期取得してレンダリングするため、DOMContentLoadedやMutationObserverのタイミングでは介入が困難です。
また、Reactはstate変更時にDOMを再構築するため、外部からのDOM操作が上書きされてしまいます。

最終的に、この方法も採用には至りませんでした。

unlikeログの生成を抑制する方法 <簡便>

ここまでの検証でプラグインへの外部からの介入は困難とわかりましたが、設定変更によってunlikeログの生成を抑制できることが判明しました。

設定手順

1:WordPress管理画面を開きます。

2:左メニューから「WP ULike」>「設定」を選びます。

3:「コンテンツタイプ」を選びます。

4:「ログの形式」を「Cookie」に変更して、右上の[保存]ボタンを押します。

※デフォルトでは「Username/IP」になっています。

効果

  • 「Cookie」方式ではunlike機能が動作しないため、「いいね取り消し」操作自体ができなくなる。
  • 結果として、unlikeログが生成されなくなる。

注意点

  • Cookieベースの制御のため、ユーザーがCookieを削除すると再度「いいね」が可能
  • 既存のunlikeログは消えない(今後の生成を抑制するのみ)。
  • ログイン中のユーザーも同様にunlike不可となる(ユーザー名での追跡はされない)。

根拠

公式ドキュメント(docs.wpulike.com)に以下の記載があります。

The Unlike/Undislike button feature only works in “Username/IP" and “Username/IP + Cookie" logging methods!

つまり、「Cookie」のみのロギング方法ではunlike機能が動作しない仕様となっています。

【補足】開発者向け情報

公式リソース

利用可能なフィルターフック

WP ULikeは以下のようなフックを提供していますが、Engagement Logsのデータ取得をフィルターするフックは公開ドキュメント上では確認できませんでした。

  • wp_ulike_respond_for_unliked_data – unlike時のAJAXレスポンスカスタマイズ
  • wp_ulike_counter_value – カウンター値のカスタマイズ
  • wp_ulike_data_inserted / wp_ulike_data_updated – データ操作後のアクション

より高度なカスタマイズが必要な場合は、プラグイン本体の改造か、GitHubでのIssue・機能要望の提出を検討してください。

おわりに

「unlikeログを隠したい」という小さな要望から始まった作業でしたが、実際はプラグインの内部動作、ログの整合性、Admin画面の仕組みなど、多くの要素が絡み合っており、簡単に介入できるものではありませんでした。
結果として、WP ULikeプラグインのログ仕様に外部から介入するのは困難かつリスクがありますが、設定変更によってunlikeの発生自体を抑制できることがわかりました。
YouTubeやXなどの挙動とは異なる点はUI的に課題は残りますが、サイト管理者はノーストレスになります。
読者のみなさんが WP ULikeプラグインを使う際、同じような問題に直面したときの判断材料になれば幸いです。