WordPressの抜粋で改行が削除される一因はHTMLコードかもしれない

 WordPressの入力時にEnterキーを叩くと段落が変わるのだが、単に改行したいこともあり、その場合はShiftキーを押しながらEnterキーを叩く。
 そうすると、段落が変わらずに改行することができる。
 そもそも、「段落」という表現が日本語と異なっているから困る。改行して一文字字下げすれば、それは新しい段落なのに、htmlの世界ではそうはみなさない。

 それはともかく、WordPressの抜粋プログラムではhtmlタグを削除するのだが、次のようなコードの場合、Web表示では改行があるのに、タグを削除しちゃうと改行が無くなる。

<p>見つかりません<br>Account has been suspended</p>

 これがずっと気になっていて、そもそもWordPressのHTMLコードが次のようになっていれば問題ないはず。

<p>見つかりません<br>
Account has been suspended</p>

 そうすることができないか、Gemini に尋ねたら、テーマファイルエディタのfunctions.phpに次のコードを入れれば良いらしい。

function add_newline_to_html_source($content) {
	// 改行を追加したいタグの配列を定義
	$tags_to_add_newline_after = array(
		'</p>',
		'</div>',
		'</ul>',
		'</ol>',
		'<BR>' // Shift+Enterで挿入される<BR>タグの後にも改行を追加
	);

	// 各タグに対して、その直後に改行コード(\n)を挿入
	foreach ($tags_to_add_newline_after as $tag) {
		// 正規表現を使って、タグの直後にある改行やスペースを無視しつつ、タグの直後に\nを挿入
		// preg_replace関数を使用
		$content = preg_replace(
			'/' . preg_quote($tag, '/') . '\s*/i', // タグと、その後に続く可能性のあるスペース・改行にマッチ
			$tag . "\n",						 // マッチした部分を「タグ」と「改行」に置換
			$content
		);
	}

	return $content;
}

// 投稿コンテンツの表示直前に上記の関数を実行する
add_filter('the_content', 'add_newline_to_html_source', 999);

 私の場合、改行タグの後ろ以外には改行は必要ないと思うので、次のコードを追加することにした。

function add_newline_to_br_tags($content) {
	$tags_to_add_newline_after = array(
		'<br>',	// 小文字のスラッシュなし
		'<BR>',	// 大文字のスラッシュなし
		'<br />',  // 小文字のスラッシュあり(スペース付き)
		'<BR />'   // 大文字のスラッシュあり(スペース付き)
	);

	foreach ($tags_to_add_newline_after as $tag) {
		// 正規表現でタグの後に続く可能性のあるすべての空白文字 (\s*) にマッチさせ、
		// 置換後の文字列でタグと改行(\n)に置き換える
		// preg_quoteで特殊文字をエスケープし、iフラグで大文字・小文字を区別しない
		$content = preg_replace(
			'/' . preg_quote($tag, '/') . '\s*/i',
			$tag . "\n",
			$content
		);
	}
	
	return $content;
}

add_filter('the_content', 'add_newline_to_br_tags', 999);

 $tags_to_add_newline_afterの配列には<br>だけで十分なのだが、配列の中が一つだけなのは気持ち悪いので追加した。

未分類
管理人のマストドンアカウントへのリンクなど

コメント

  1. ishii ishii より:

    残念ながら失敗した。
    マストドンで表示された抜粋は次のようになって、やはり改行は削除されてしまった。HTMLコードには改行が追加されている。

     WordPressの入力時にEnterキーを叩くと段落が変わるのだが、単に改行したいこともあり、その場合はShiftキーを押しながらEnterキーを叩く。 そうすると、段落が変わらずに改行することができる。 そもそも、「段落」という表現が日本語と異なっているから困る。改行して一文字字下げすれば、それは新しい段落なのに、htmlの世界ではそうはみなさない。
    • ishii ishii より:

      wp_posts テーブルの post_content が次のようになってる。

      <!-- wp:paragraph -->
      <p> WordPressの入力時にEnterキーを叩くと段落が変わるのだが、単に改行したいこともあり、その場合はShiftキーを押しながらEnterキーを叩く。<br> そうすると、段落が変わらずに改行することができる。<br> そもそも、「段落」という表現が日本語と異なっているから困る。改行して一文字字下げすれば、それは新しい段落なのに、htmlの世界ではそうはみなさない。</p>
      <!-- /wp:paragraph -->
タイトルとURLをコピーしました