投稿内容に応じてwpautopを制御する

投稿内容に応じてwpautopを制御する - HTMLソースを流し込んだ時はwpautopはいらない

説明

投稿内容を表示するthe_content関数では、wpautop関数がフィルターの1つとして呼び出され、改行をbrタグに変換したり、pタグで調整したりする。この機能自体は便利なのだが、きちんとデザインされたHTMLソースを流し込んだ場合はこの機能は好ましくない。そんなわけで、記事内容に応じてwpautop関数を制御できないか考えてみた。

制御方法について検討したのは、

  • a) いくつかのカテゴリを限定する
  • b) カスタムフィールドを使う
  • c) 投稿内容に特定のコメントを入れる

といった感じ。これらの選択肢の中で最終的に決定したのは、「特定のコメントを入れる」方法になる。この方法を選択した理由は、コメントの場合は投稿内容の文字列だけで処理を判断できるためだ。

自テーマのfunctions.phpに追加するコードは次の通り。

function noautop( $content ) {
	if ( strpos( $content, '<!--noautop-->' ) !== false ) {
		remove_filter( 'the_content', 'wpautop' );
		$content = preg_replace( "/\s*\<!--noautop-->\s*(\r\n|\n|\r)?/u", "", $content );
	}
	return $content;
}
add_filter( 'the_content', 'noautop', 1 );

ポイントはadd_filter関数の第3パラメータに1を指定しているところ。これにより、the_content関数のフィルター関数として、最優先に実行することができる。noautop関数では、投稿内容に特定のコメント(ここでは'<!--noautop-->')の有無を調べ、あった場合にはwpautop関数をフィルターから外し、そのコメント自身を消去している。

さて制御方法の検討段階では、投稿内容にショートコードを含めることも検討した。ショートコードで制御できるかを調べる段階で、wpautop関数の実行直後にショートコードが実行されることがわかった。これまでショートコードの実行タイミングをあまり意識していなかったが、この点は押さえておいたほうがいいだろう。

関連

お勧めコンテンツ

in_category(2010年9月27日 登録)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

update_option(2010年7月5日 登録)

bool update_option( string $option, mixed $newvalue [, mixed $autoload = null ] )
サイトオプションの値を更新する。

add_query_arg(2013年1月22日 登録)

string add_query_arg( mixed $param1 [ , mixed $param2 [ , mixed $param3 ] ] )
クエリーURIを更新する。

register_nav_menus(2010年11月2日 登録)

void register_nav_menus( [ array $locautions = array() ] )
自テーマにナビゲーションメニューを追加する。

wp_get_post_tags(2011年6月2日 登録)

mixed wp_get_post_tags( [ int $post_id = 0 [ , array $args = array() ] ] )
投稿記事の投稿タグ情報を取得する。

最終更新日時 : 2013-08-13 15:07