WordPress の wpautop 機能をオン/オフするプラグインをつくってみる
まずは基本。
WordPress プラグイン API(日本語訳)
WP 2.6 のフック一覧はこちら。アクションフックとフィルターフックがある。
All hooks in WP 2.6
プラグインの目的
記事(またはページ)単位で、wpautop 機能をオン/オフすることができる機能を提供すること。
コントロールの手段
ひとまず、記事(またはページ)のカスタムフィールド(disable_content_autop, disable_excerpt_autop)の値によって wpautop をオフにできるようにする。
実装方法の検討
以下の手順で実現できそうな気がする。
- まずは remove_filter('the_content', 'wpautop'); remove_filter('the_excerpt', 'wpautop'); として、content および excerpt に対する wpautop の実行をデフォルトでオフにする
- content を処理する前のいずれかの段階のアクションフックを利用して、カスタムフィールドの値をグローバル変数に格納する
- フィルターフック the_content および the_excerpt を使って、wpautop がオフになっていない場合に限り、function wpautop() を実行する
実際につくってみる
まずは、手順2 のアクションフックを探す必要がある。
これらを見ると loop_start が良さげなので、ひとまずこれをフックにしてみよう。
結果(不成功)
WordPress のフィルターチェーンの詳細を理解しないと、この設計で動作させることが可能なのかどうかすらわからない。
一般的にはフィルターは全体にかかってしまうので、ループの中で個別の条件を判定してフィルターの除外をするのは結構難しい感じ。
世界中で wpautop に関しては不具合の報告が多いのに有効なプラグインがないのは、やっぱりその辺りが難しいからかも知れない。
残念!
追記 >
たぶん、このプラグインで解決。
WordPress > WP Unformatted