お名前.comのレンタルサーバーでContact Form 7の応答メッセージが出ない問題を解決したい

お名前.comのレンタルサーバーで運用しているWordPressサイトにて、Contact Form 7で作成したフォームの応答メッセージが表示されないという問題が発生しました。

今回の症状を確認した環境は以下の通りです。

  • サーバー: お名前.com レンタルサーバー
  • WordPress: 6.9
  • Contact Form 7: 6.1.4
  • PHP: 8.3.16

原因特定までの経緯

まず、一般的に原因と言われることが多い「プラグインの競合」や「WAF(Web Application Firewall)の設定」を確認しましたが、いずれも今回のケースには該当せず、解決には至りませんでした。

その後、テーマのfunctions.phpに記述されているコードを細かくチェックしていたところ、ようやく真の原因が判明しました。

原因:自動整形の無効化コード

調査を進めたところ、原因はfunctions.phpに記述していた以下のコードでした。

add_filter('wpcf7_autop_or_not', '__return_false');

これはContact Form 7の自動整形(タグの間に自動でpタグやbrタグが入る仕様)を無効化するためのものですが、これが原因で本来自動で表示されるはずの応答メッセージまでもが表示されなくなっていたのです。

しかし、このコードを削除すると今度はフォームのレイアウトが崩れてしまうため、設定自体は残しておく必要がありました。

解決策:[response] タグの活用

さらに調査を続けた結果、Contact Form 7には応答メッセージを任意の位置に表示させることができる[response]というタグがあることが分かりました。

「自動で表示されないのであれば、手動で表示場所を指定すればいいのでは?」と考え、コンタクトフォームの編集画面にて、送信ボタンのすぐ下などにこのタグを直接書き込んでみました。

[submit "送信"]
[response]

この状態でテスト送信を行ったところ、無事に応答メッセージが表示されるようになりました!

まとめ

お名前.comのレンタルサーバーで「Contact Form 7の応答メッセージが出ない」という問題に遭遇した際、WAFなどのサーバー設定を疑っても解決しない場合は、functions.phpによる自動整形の無効化が干渉している可能性があります。

今回のポイントは以下の通りです。

  • 原因:add_filter('wpcf7_autop_or_not', '__return_false');や、wp-config.php等でのdefine( 'WPCF7_AUTOP', false );という記述が、応答メッセージの自動挿入も止めていた。
  • 解決策: フォームの編集画面で、表示させたい場所に[response]タグを直接記述する。

「コードによるカスタマイズ」と「プラグイン標準のタグ」をうまく組み合わせることで、レイアウトを保ったまま正常にメッセージを表示させることができました。

同じような環境・症状で悩んでいる方は、ぜひ一度フォーム内に[response]タグを書き足してみてください。

参考サイト