お名前.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]タグを書き足してみてください。