WordPress | 自動整形無効サイトで一部投稿のみ改行を
に変換する運用へ移行した対応例

これまで当サイトでは、投稿本文の出力において 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タグの制御は引き続き編集者に委ねる
  • ただし、単純なテキストで改行だけしたい記事では手間を省ける
  • 既存記事への影響はゼロ
  • 投稿スタイルや記事種別に応じた柔軟な出力制御ができる

今後も必要に応じて、フィルターや条件を追加することで、より多様なコンテンツ運用に対応可能です。運用切り替えやサイトリニューアルの際には、こうした部分的な仕様変更も非常に有効です。

コメント

タイトルとURLをコピーしました