【WooCommerce&SiteGuard】マイアカウントのログイン・パスワードリセットができない問題の解決策

2021年3月12日
【WooCommerce&SiteGurd】マイアカウントのログイン・パスワードリセットができない問題の解決策

WooCommerceは、WordPressでECサイトを構築するなら、選択肢に入ってくるプラグインです。

WooCommerce is the world’s most popular open-source eCommerce solution.
wordpress.org

自身も運営するサイトに導入しており、当記事タイトルのような困ったことがありましたが…
解決策を共有したいと思います。

実際に起きた状況

  • WooCommerceのマイアカウントにログインできない
  • マイアカウントのパスワードリセットができない

ログインボタンやリセットボタンを押してもページが切り替わらず、同じページにリダイレクトされます。
エラーメッセージも出ません…

【下記動画参照】

お客さまがご自身のアカウントページに入れない。パスワードが間違ってるのかな?と思ってリセットをかけても機能しない…といった大変困った状況でした。

パスワードやユーザー名が正しいことも確認し、
各種プラグインやWordPress本体のバージョンは最新でした。

原因:WooCommerceとSiteGuardの相性

該当サイトに導入していたWordPressのプラグイン、WooCommerceとSiteGuardの相性の問題でした。

SiteGuardはログインフォームなどに画像認証を追加し、セキュリティを高めてくれるプラグインなのですが、WooCommerceが生成したフォームにはデフォルトでは画像認証が表示されません。

しかし、内部的には画像認証はフォームの送信に必須なので、何度やっても送信がうまくいかないということでした。

解決策:フォームにSiteGuardの画像認証を追加

解説

WooCommerceのマイアカウントのログインフォーム・パスワードリセットフォームにSiteGuardの画像認証を追加しました。

どうやるかというと、WordPressのフィルターフック機能を使います。

フィルターフックについては下記記事参照

こんにちは、日々WordPressをカスタマイズしているエンジニアのひろゆきです。 今回はWordPressのカスタマイズの際に活躍するフィルターフック、アクシ…
liginc.co.jp

マイアカウントのログインフォーム・パスワードリセットフォームに機能を差し込みます。
WooCommerceの該当箇所のフックを確認します。(プラグインファイルのテンプレートファイルをみましょう)

  • マイアカウントのログインフォームのフック:woocommerce_login_form_start
  • パスワードリセットフォームのフック:woocommerce_lostpassword_form

が都合良さそうです。

最終的に下記コードをfunctions.phpに追記で解決しました。

functions.php

if ( isset( $siteguard_captcha ) ) {
add_filter( ‘woocommerce_login_form_start’, array( $siteguard_captcha, ‘handler_login_form’ ) );
add_filter( ‘woocommerce_lostpassword_form’, array( $siteguard_captcha, ‘handler_lostpassword_form’ ) );
}

たった4行のコードを追記で解決しました。よかった…

きちんと各種フォームが機能しています。

同様のことでお困りの際はぜひ参考にしてみてください。


関連リンク

https://shop.o-kuri.com