【完全解説】Contact Form 7で自動挿入されるpタグ・brタグを削除する2つの方法

はじめに

WordPressでお問い合わせフォームを作成する際、最も人気のあるプラグインの一つが Contact Form 7 です。導入の手軽さや拡張性の高さから多くの現場で使われていますが、実務でよく遭遇する問題のひとつが、勝手に<p>タグや<br>タグが挿入されてしまう現象です。

これにより、以下のような悩みが発生します。

  • 余計な余白ができてしまう
  • レイアウトが崩れてしまう
  • CSSで思ったようにスタイリングできない

本記事では、Contact Form 7で自動挿入されるpタグやbrタグを削除する2つの方法を、コード例とともにわかりやすく解説します。

フロントエンドを学習している方はもちろん、実際にWordPress案件で構築を行っている方にも役立つ内容になっています。


なぜpタグやbrタグが自動で挿入されるのか?

Contact Form 7は、フォームの可読性を高めるために、内部的にwpautopというWordPressの関数を利用してHTMLを整形しています。この仕様により、フォームタグの出力に対して自動的に段落(<p>)や改行(<br>)が追加されます。

例:

<p><label>お名前<br />
<input type="text" name="your-name" /></label></p>

この仕様自体は便利ですが、デザインを細かく調整したい場合や、CSSグリッド・Flexboxでレイアウトを組んでいる場合には、余計なタグが障害になってしまいます。


方法1: フィルターフックを使って全体的に無効化する

まず紹介するのは、テーマ全体で自動挿入を無効化する方法です。

WordPressテーマのfunctions.phpに以下を追加します。

// Contact Form 7 の自動pタグ・brタグを無効化
add_filter('wpcf7_autop_or_not', '__return_false');

解説

  • wpcf7_autop_or_not フィルターは、Contact Form 7の自動整形を制御する専用フック。
  • __return_false を指定することで「自動整形しない(falseを返す)」という挙動になります。
  • 全てのフォームに適用されるため、複数のフォームを持つサイトでも一括で制御可能。

メリット

  • 全フォームに一括適用できるため、サイト全体の整合性がとれる
  • 実務で「不要な改行を全部なくしたい」というケースに最適

デメリット

  • 特定のフォームだけ自動整形を残したい場合には不向き

方法2: ショートコード属性で個別に制御する

次に紹介するのは、特定のフォームだけpタグ/brタグの自動挿入を無効化する方法です。

通常のフォーム呼び出しは以下のようになります。

[contact-form-7 id="123" title="お問い合わせフォーム"]


ここに do_not_autop=”true” を追加します。

[contact-form-7 id="123" title="お問い合わせフォーム" do_not_autop="true"]

解説

  • do_not_autop=”true” を付与すると、そのフォームだけ自動整形が無効化されます。
  • サイト内に複数フォームがある場合、個別に制御できるのが大きな特徴。

メリット

  • 必要なフォームだけ制御できるため柔軟性が高い
  • コード編集(functions.php)不要なので初心者でも扱いやすい

デメリット

  • 複数フォームを扱う場合、毎回オプションを追加する手間がある

実務ではどちらを選ぶべきか?

  • 全サイトで統一して無効化したい場合 → 方法1(フィルターフック)
  • フォームごとに制御したい場合 → 方法2(ショートコード属性)

特に実務では、基本は方法1で全体制御 → 特定フォームだけ方法2で調整という使い分けがおすすめです。


応用Tips: デザイン調整と併用する

pタグやbrタグを削除した後は、CSSやHTML構造を自分でしっかり組み立てる必要があります。

例:Flexboxを使った整列

.form-row {
  display: flex;
  gap: 20px;
}
.form-row label {
  flex: 1;
}

このように、意図的にレイアウトを制御することで、無駄な余白を排除しつつ、デザイン性の高いフォームを構築できます。


まとめ

Contact Form 7で勝手に挿入されるpタグ・brタグを削除する方法は大きく2つあります。

  1. フィルターフックを使って全体的に無効化
add_filter('wpcf7_autop_or_not', '__return_false');



ショートコード属性で個別に制御

[contact-form-7 id="123" do_not_autop="true"]

実務での推奨は「方法1で全体無効化+必要に応じて方法2を併用」。

これでフォームの余計な余白や崩れを防ぎ、思い通りのデザインを実現できるようになります

(Visited 3 times, 1 visits today)