WordPress の wpautop 機能をオン/オフするプラグインをつくってみる

まずは基本。
WordPress プラグイン API(日本語訳)

WP 2.6 のフック一覧はこちら。アクションフックとフィルターフックがある。
All hooks in WP 2.6

プラグインの目的

記事(またはページ)単位で、wpautop 機能をオン/オフすることができる機能を提供すること。

コントロールの手段

ひとまず、記事(またはページ)のカスタムフィールド(disable_content_autop, disable_excerpt_autop)の値によって wpautop をオフにできるようにする。

実装方法の検討

以下の手順で実現できそうな気がする。

  1. まずは remove_filter('the_content', 'wpautop'); remove_filter('the_excerpt', 'wpautop'); として、content および excerpt に対する wpautop の実行をデフォルトでオフにする
  2. content を処理する前のいずれかの段階のアクションフックを利用して、カスタムフィールドの値をグローバル変数に格納する
  3. フィルターフック the_content および the_excerpt を使って、wpautop がオフになっていない場合に限り、function wpautop() を実行する

実際につくってみる

まずは、手順2 のアクションフックを探す必要がある。

プラグイン API/アクションフック一覧

The Loop:WordPress Codex 日本語版

これらを見ると loop_start が良さげなので、ひとまずこれをフックにしてみよう。

結果(不成功)

WordPress のフィルターチェーンの詳細を理解しないと、この設計で動作させることが可能なのかどうかすらわからない。
一般的にはフィルターは全体にかかってしまうので、ループの中で個別の条件を判定してフィルターの除外をするのは結構難しい感じ。
世界中で wpautop に関しては不具合の報告が多いのに有効なプラグインがないのは、やっぱりその辺りが難しいからかも知れない。

残念!


追記 >

たぶん、このプラグインで解決。
WordPress > WP Unformatted