投稿日:2022/09/12 最終更新日:2022/09/12
remove_filterでpタグを削除出来ない場合の解決法
発生内容
WordPressではthe_content()やthe_excerpt()で投稿内容を出力する際にpタグが自動的に保管されるようになっていますよね。
しかし、「いや、pタグはいらんなぁ」みたいな時に以下のコードをfunctions.phpに書くことで自動保管を解除することができます。
// 投稿本文のpタグ自動保管を解除する
remove_filter('the_content', 'wpautop');
// 投稿抜粋のpタグ自動保管を解除する
remove_filter('the_excerpt', 'wpautop');
または、以下のようにページごとでpタグ自動保管を解除することもできます。
// 個別に投稿本文のpタグ自動保管を解除する
<?php remove_filter ('the_content', 'wpautop'); ?>
<?php the_content(); ?>
// 個別に投稿抜粋のpタグ自動保管を解除する
<?php remove_filter ('the_excerpt', 'wpautop'); ?>
<?php the_excerpt(); ?>
ただ、この方法が全く効かない怖い状況になることがあります。
原因としてはプラグインが干渉しているなどがありますが、「プラグインを1つずつ確認するのは面倒!すぐに対処できないの?」と思いませんか?
そんな時にこんな方法がベストプラクティスです。
解決法
get_○○関数でテキストをそのまま表示させる
この場合は、わざわざpタグ付きの状態で出力するのではなく、直接テキストのみを出力させましょう。
WordPressでは投稿に関係するテキスト情報をそのまま出力させてくれる関数を用意してくれています。
// 投稿本文のテキストのみ取得&表示
<?php echo get_the_content(); ?>
// 投稿抜粋のテキストのみ取得&表示
<?php echo get_the_excerpt(); ?>
上記の方法ではデータベースの情報をそのまま取得してechoで出力させているためpタグが保管されることはありません。
// コメント本文のテキストのみ取得&表示
<?php echo get_comment_text(); ?>
// タイトルのテキストのみ取得&表示
<?php echo get_the_title(); ?>
また、記事タイトルや記事のコメント本文も同様にget_○○が用意されているため、pタグなしで容易に出力することができます。
注意点としてはechoを忘れないことです。
たとえば、the_title()はechoを宣言しなくても出力をしてくれるべんりーな関数です。
その分、pタグの自動保管も場合によっては便利かもしれないですがほとんどはいらない機能も同時に兼ね備えています。
これは、the_content()、comment_text()、the_excerpt()も同様です。
一方、get_the_title()はタイトルのテキストを取得するだけなので、echoまではしてくれません。
その分pタグも自動で保管されないので、以下のように、
<p class="title"><?php echo get_the_title(); ?></p>
みたいなことをしても、「あれ、pタグが増えてる、、」みたいなことにはならないのです。
functions.phpに書き加える必要もなければ、一番エコで保守しやすい書き方だと思いますので、私はベストプラクティスだと思っています。