WordPressでカスタムフィールドの値を出力する際、意図した場所で改行が反映されず、テキストが詰まって表示されてしまう経験はありませんか?
例えば、管理画面で綺麗に改行して入力した文章が、サイト上ではベタ打ちの長文になってしまい、読者にとって非常に読みづらい状態になってしまいます。これは、カスタムフィールドの値がそのままではHTMLの改行タグ( br )として処理されないために発生するのです。
さらに、値を単純に出力するだけでは、悪意のあるユーザーが仕込んだ不正なHTMLタグやスクリプトがそのままサイトに表示されてしまうという深刻なセキュリティリスクも伴います。これがいわゆるXSS(クロスサイトスクリプティング)攻撃の温床となるわけです。この問題を放置するコストは計り知れないでしょう。
nl2brと esc_htm の併用が安全かつ確実に改行を反映させるベストプラクティス
前述の問題を解決し、安全で読みやすいカスタムフィールドの値を出力するための基本形は、以下の2つの関数を組み合わせることです。- esc_html(): 出力前に、値に含まれる全てのHTMLタグを無効化(エスケープ)し、セキュリティリスクを排除します。
- nl2br(): エスケープされた後の値に対し、テキストの改行コード(\n)をHTMLの
タグに変換し、ブラウザで正しく改行を表示させます。
この併用こそが、出力における改行の維持とセキュリティの確保という二律背反の課題を同時にクリアする、最善の手法と言えます。
①標準関数でカスタムフィールドの値を出力する基本形
WordPressの標準関数get_post_meta() を用いて、投稿メタデータ(カスタムフィールドの値)を出力する際の、2025年時点の最も推奨されるコードがこちらです。|
1 2 3 4 5 6 7 8 |
// カスタムフィールドのキーを定義 $custom_field_key = 'キー'; // 投稿IDから値を取得 $meta_value = get_post_meta(get_the_ID(), $custom_field_key, true); // エスケープと改行変換を適用して出力 echo nl2br(esc_html($meta_value)); |
get_the_ID() を使って現在の投稿IDを取得することで、どの投稿のカスタムフィールド値なのかを明確に指定できるのです。
この記述方法が、古い記事にある $post->ID を使う方法よりも、現在のWordPressのコーディング標準に則ったやり方でしょう。
②ACF (Advanced Custom Fields) を使う場合
より高度な入力管理のためにカスタムフィールドプラグインを利用することが多々あります。代表的なプラグインを利用する場合も、セキュリティと改行の原則は変わりません。ACFは、値の出力に専用の関数
get_field() や the_field() を提供しています。しかし、標準では値がエスケープされないため、必ず esc_html() を通すべきです。|
1 2 3 4 5 6 7 8 9 |
// 1. 値を取得し、エスケープと改行処理を施して出力 (推奨) $acf_value = get_field('フィールド名'); if ($acf_value) { echo nl2br(esc_html($acf_value)); } // 2. the_field()で自動出力する場合 (ACFのフォーマット設定に依存するため非推奨) // the_field()自体はエスケープされないため、もし使うなら設定画面で「no formatting」を選び、 // 自分でesc_htmlを通した方が安全性が高くなります。 |
ACFのフィールド設定で「改行の自動変換」オプションが有効になっている場合、ACFが出力時に wpautop(段落タグの自動挿入)や nl2br に似た処理を行う場合があります。
しかし、プラグインのバージョンや設定に依存するため、自分で the_field()で値を取得し、上記のように処理するのが最もコントロールが効き、安定した方法といえます。
③Toolset (Types) を使う場合
「Types」プラグイン(現:Toolset Typesモジュール)を使用している場合、値の出力には専用の関数が使われます。|
1 2 3 4 5 6 |
// Toolsetの専用関数で値を取得し、エスケープと改行処理を施して出力 // types_render_field()はHTMLを出力してしまうため、get_post_meta()を使う方がベターです。 $types_value = get_post_meta(get_the_ID(), 'wpcf-キー', true); // 標準関数で取得した値を安全に出力 echo nl2br(esc_html($types_value)); |
過去の types_render_field() 関数は、カスタムフィールドの生の値を直接取得しないため、esc_html などの標準的なエスケープ処理を適用しづらい側面があります。
そのため、WordPress標準の get_post_meta() とToolsedが登録するフィールドキー(wpcf-から始まるもの)を組み合わせて利用することが、より安全性を高める堅実な手段といえます。
【まとめ】カスタムフィールド出力のチェックリスト
カスタムフィールドの値を扱う際は、ぜひ以下の点検項目を常に意識してみてくださいね!| 項目 | 目的 | 適用関数 |
|---|---|---|
| セキュリティ | 悪意のあるスクリプトを無効化する。 | esc_html() |
| 視認性 | 入力した改行をブラウザで正しく反映させる。 | nl2br() |
| 標準化 | プラグインに依存せず安定した値を取得する。 | get_post_meta() |


コメント