これまで当サイトでは、投稿本文の出力において WordPress 標準の自動整形機能 wpautop()
を無効化し、HTMLの段落や改行をすべて手動で記述する運用を行っていました。
// wpautop(自動整形)を無効
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
この方針により、出力される HTML を完全に制御し、予期しない <p>
や <br>
タグが挿入されることを防いでいました。
運用方針の変更と課題
今回、投稿タイプ「report」での運用方針が変更され、HTML自体は書けるが、改行のたびに <br>
タグを毎回入力する運用をやめたいという要件が発生しました。
つまり、あくまで「改行コード(Enter)で <br>
を自動出力する仕様に限って適用」し、他の投稿や過去のコンテンツへの影響は与えない必要があります。
対応方針
この要件に対し、以下のような条件を満たすように実装しました。
- WordPress全体では
wpautop
を無効化したまま維持 - 投稿タイプが「report」であること
- 投稿IDが特定値(例:10000)以上であること
- 条件に合致する場合のみ、改行コードを
<br>
に変換する
投稿IDを基準に <br> を適用する実装
/**
* 投稿タイプ 'report' の記事において、投稿IDが10000以上のものだけ
* 改行コードを <br> タグに変換して表示する(wpautopは全体で無効化済み)。
*
* @param string $content 投稿本文
* @return string 変換後のコンテンツ
*/
add_filter('the_content', 'apply_nl2br_by_post_id');
function apply_nl2br_by_post_id($content) {
global $post;
if (!$post || get_post_type($post) !== 'report') return $content;
if ($post->ID >= 10000) {
return nl2br($content);
}
return $content;
}
このコードにより、投稿IDが10000以上の「report」記事だけが対象となり、本文中の改行(\n
)が <br>
に変換されて出力されます。
その他の条件による制御方法
投稿日を基準にする場合
add_filter('the_content', 'apply_nl2br_by_post_date');
function apply_nl2br_by_post_date($content) {
global $post;
if (!$post || get_post_type($post) !== 'report') return $content;
$cutoff = strtotime('2024-06-01');
if (strtotime($post->post_date) >= $cutoff) {
return nl2br($content);
}
return $content;
}
IDと投稿日両方で制御する場合
add_filter('the_content', 'apply_nl2br_by_id_and_date');
function apply_nl2br_by_id_and_date($content) {
global $post;
if (!$post || get_post_type($post) !== 'report') return $content;
$min_id = 10000;
$min_date = strtotime('2024-06-01');
if ($post->ID >= $min_id && strtotime($post->post_date) >= $min_date) {
return nl2br($content);
}
return $content;
}
その他の応用的な制御
カスタムフィールドで切り替え
if (get_post_meta($post->ID, 'apply_nl2br', true) === '1') {
return nl2br($content);
}
タグ・カテゴリで切り替え
if (has_term('改行変換あり', 'post_tag', $post)) {
return nl2br($content);
}
条件分岐の選び方
基準 | 運用に向いているケース |
---|---|
投稿ID | 明確な移行タイミングがあり、記事番号で区切れる場合 |
投稿日 | 公開日をベースに表示仕様を切り替えたい場合 |
両方 | 特定期間に投稿された一部だけを対象としたい場合 |
カスタムフィールド | 投稿ごとに手動で改行有無を切り替えたい場合 |
タグ・カテゴリ | 編集方針に応じて分類されたグループ単位で切り替えたい場合 |
まとめ
今回の対応により、全体で wpautop
を無効にしたまま、特定の条件下でのみ改行コードを <br>
に変換する運用が可能となりました。
- HTMLタグの制御は引き続き編集者に委ねる
- ただし、単純なテキストで改行だけしたい記事では手間を省ける
- 既存記事への影響はゼロ
- 投稿スタイルや記事種別に応じた柔軟な出力制御ができる
今後も必要に応じて、フィルターや条件を追加することで、より多様なコンテンツ運用に対応可能です。運用切り替えやサイトリニューアルの際には、こうした部分的な仕様変更も非常に有効です。
コメント