【WordPress】Contact Form 7 でくるくるが止まらないのはカスタマイズが原因だった
WordPressでメールフォームを作るといえば、真っ先に浮かぶのがContact Form7。という位よく使われているプラグインです。
先日、久しぶりにこのプラグインのバージョンアップを行う作業があり、バージョンアップしたところ、くるくるが止まらずメールが送信できなくなってしまいました。
一番初めに調べる事は「REST API」が無効になっていないかどうか
Contact Form7の公式にあるように、4.8以降のバージョンではAjaxフォーム送信にWordPress REST APIというのを利用しています。
名の通りAPIなので、とても便利になったわけですが、WordPress4.7でその脆弱性が指摘され、よし無効にしよう!という動きもありました。
function.phpなどやプラグインなどで無効にした作業をしていると、Cotact Form7の4.8以降では動作しなくなってしまいます。
これを解決するには、3つ手段があります。
- REST APIを有効にする
- Contact Form7だけREST APIを有効にする
- Ajaxを使わないように「Contact Form 7 Controls」というプラグインを使う
既に脆弱性については解決済みであるため、1.REST APIを有効にする という手段でもよいと思います。どうしても気になるようでしたら、2のCotact Form7だけ有効にすればよいです。これは検索するとやり方を載せている方がいらっしゃるので参考にしてみてください。
それでも動かない場合は、カスタマイズされていなか調べる
私が先日対応したContact Form7のアップデートでは、上記のREST APIの設定はクリアしており、別の事が原因で動いておりませんでした。
コンソールを見ると、フォームの情報をPOSTするREST APIが404を吐いています。しかし、APIのURLを見る限りフォームのIDは合っており、なぜ404になるか分からないでいました。
実は、今回のフォームではパラメーターをCotact Form7に値を受け渡すという事を行っており、function.phpでフィルターフックを使い値を受け渡していたのです。
ですので、フックの方法が変わったのかな、と調べてみたりしましたが何もつかめません。
そこで、少し引っかかっていた事を調べる事にしました。
idという名前
パラメーターの変数名に「id」とう名前を使っておりました。
/?id=XXXXこのような感じです。
これをContact Form7のタグに、フィルターフックを使って入れる時に、変数名と同じように「id」という名前で登録しておりました。
$tag[‘id’] =(array)$_GET[‘id’];
この「id」を別の名前に変更したところ、404エラーが消え、くるくるも消え、正常に動作するようになりました。
変数名、名前の衝突を避ける
なぜこの「id」とう名前を使わないと動くのかというのをContact Form7のソースの中を追って確認はしませんでしたが、名前の衝突が起こったのではないかと考えています。
WordPressでも予約語という使ってはいけない名前が存在まします。既に使っているので、衝突するから新たに使わないでね。という事です。
今回はこれと似たような事が起こったのではないかという見解です。
よく使われている、使いやすい単語などは注意が必要です。今回のidもそうですが、postやcodeなどは使う際には気をつけた方がよいですね。
このような名前をつけたい時は****_idなど、何のidかを明確に記載する事でわかりやすくなり、衝突を避ける事もできるのでおすすめです。