こんにちは
add_filter( 'the_title', 'my_html4_break',11 );
add_filter( 'the_content', 'my_html4_break',11 );
//...
function my_html4_break( $return_value ) {
return preg_replace( '!(<br)[^/]+/>!','<br>', $return_value );
}
のように、フィルタで上書きするといいと思います。
回答ありがとうございます。
// convert_charsで変換されたタグを置換
add_filter( 'the_title', 'my_html4_break', 11 );
add_filter( 'the_content', 'my_html4_break', 11 );
add_filter( 'the_excerpt', 'my_html4_break', 11 );
add_filter( 'comment_text', 'my_html4_break', 11 );
function my_html4_break( $return_value ) {
return preg_replace( '!(<br)[^/]+/>!', '<br>', $return_value );
}
上記の様に試してみたところ、br要素が全て消え、改行した箇所が全てp要素で囲まれる様になってしまいました。
また、remove_filterによるオートフォーマットの無効化と合わせて使用したところ、br要素は消えなくなりましたが置換が効いていないようです。
add_filter( 'the_title', 'my_html4_break', 11 );
add_filter( 'the_content', 'my_html4_break', 11 );
//add_filter( 'the_excerpt', 'my_html4_break', 11 );
add_filter( 'comment_text', 'my_html4_break', 12 );
function my_html4_break( $return_value ) {
return preg_replace( '!(<br)[^/]+/>!', '<br>', $return_value );
}
こちらで確認しましたが、
the_excerptは、br入らないと思いますので3件テスト
WordPress4.1 twentyfifteen
コメントだけは、プライオリティ 12でないと変換されませんでしたが、全部変換されました。
<br>
が消えるという事ですが、であれば、正規表現はヒットしていると思いますので、
他に、<br>
を削除するようなフィルタがあるとか、他の整形用のプラグイン等の影響ではないかと思います。
プライオリティを、999とかに変更して確認してみてください。
ありがとうございます。
プライオリティを30まで上げたところ、コメントの方は無事反映されました。
また、<br>
が消えた件についてはこちらの勘違いでした。
正確には連続した<br>
だけが消え、一つだけの箇所はきちんと置換されていました。
(本来は連続して<br>
を使うという事をせずにCSSで対応すべきなのですが、諸事情でどうしても連続で使用する場面があるという状況です)
尚、次の様にしたところ連続した空要素が消える様な事は無くなったのですが、問題などあれば指摘して頂けると助かります。
// オートフォーマット関連の無効化
add_action( 'init', function() {
remove_filter( 'the_title', 'wpautop' );
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
remove_filter( 'comment_text', 'wpautop' );
remove_filter( 'the_title', 'wptexturize' );
remove_filter( 'the_content', 'wptexturize' );
remove_filter( 'the_excerpt', 'wptexturize' );
remove_filter( 'comment_text', 'wptexturize' );
remove_filter( 'the_editor_content', 'wp_richedit_pre' );
});
// オートフォーマット関連の無効化 TinyMCE
add_filter( 'tiny_mce_before_init', function( $init ) {
$init['wpautop'] = false;
$init['apply_source_formatting'] = ture;
return $init;
});
// convert_charsで変換されたタグを置換
add_filter( 'the_title', 'my_html4_break', 11 );
add_filter( 'the_content', 'my_html4_break', 11 );
add_filter( 'comment_text', 'my_html4_break', 30 );
function my_html4_break( $return_value ) {
return preg_replace( '!(<br)[^/]+/>!', '<br>', $return_value );
}
Codexにも書いてありますが、
この関数は、意図したフィルター以外のフィルターも除去する可能性があります。
remove_filterを使うのは極力避けたほうがいいです。
なんで?
the_title the_content等のフィルタは、プラグインで頻繁に使われます。
つまり、プラグインの動作がどんどん不安定になったりする可能性があるので、やめたほうがいいです。
TinyMCEのその設定は、調べていないのでよくわかりませんが、私の理解では、tinymceで作られたhtmlは、最終的に、WordPressの、wpautopでフィルタされて出力されます。
二つの方法で、htmlが生成されることによって、p要素のおかしな配置が発生する事がありますが、だからと言って 機能そのものを無効化する処理を行うより
フィルタなどで、不具合店の修正をする方が簡単だと思います。
本来は連続してを使うという事をせずにCSSで対応すべきなのですが、諸事情でどうしても連続で使用する場面があるという状況で
もし行間調整などの目的でしたら、最新バージョンと出来のいいテーマを使っていれば、
行間は、エディタでの連続改行で調整できますよ
ソースは
<p> </p>
連続改行についてはご指摘の通り行間調整が目的なので、その部分を見直しながら空要素が使われた時の末尾のスラッシュについてはフィルタを用いて置換する事で対応しようと思います。
また、remove_filterについて安易な使用は避けた方が良いという事もとても勉強になりました。
ありがとうございました。