目標
・過去の記事に対しては、「brBrbr」プラグインを適用する
・新規の記事に対しては、適用しない
こんな感じの共存環境をまず作ろうというのが「その1」です。
参考になるプラグイン
簡単に投稿ごとに wpautop フィルターを無効にします。
記事毎に、自動整形機能(wpautop)の有効・無効を切り替えられるプラグインです。「brBrbr」プラグインの場合は、自動整形機能(wpautop)を無効にしてから、それに変わる機能に置き換えてます。そのあたりが少し違いますが、構造的に非常に参考になります。
過去記事と新規記事の判断
カスタムフィールド名:_enable_brbrbr
値:1
カスタムフィールドを利用することにしました。
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT wp_posts.ID, '_enable_brbrbr', '1'
FROM wp_posts
WHERE wp_posts.post_status = 'publish' and wp_posts.post_type in ('post','page');
【Wordpress】【SQL】カスタムフィールドのデータを全記事分作成するSQL – ブログ運営のためのブログカスタマイズ
上記SQLを実行して、現在ある記事分、「_enable_brbrbr=1」となるようなカスタムフィールドを作成します。
brBrbrプラグインの改造
wpautopの無効化の部分をコメントアウト
//remove_filter('the_content','wpautop');
//add_filter('the_content','brBrbr');
「//」を文頭にいれてコメント化して、実行されないようにしてください。
上記は、Wordpressの記事部分の処理です。
_enable_brbrbr=1の時だけ、brBrbrが実行されるようにする
add_action( 'the_post', 'brbrbr_the_post');
function brbrbr_the_post( $post ) {
if ( get_post_meta( $post->ID, '_enable_brbrbr', true ) ) {
remove_filter( 'the_content', 'wpautop' );
add_filter('the_content','brBrbr');
} else {
if ( ! has_filter( 'the_content', 'wpautop' ) ) {
add_filter( 'the_content', 'wpautop' );
remove_filter('the_content','brBrbr');
}
}
}
add_action( 'loop_end','brbrbr_loop_end');
function brbrbr_loop_end() {
if ( ! has_filter( 'the_content', 'wpautop' ) ) {
add_filter( 'the_content', 'wpautop' );
remove_filter('the_content','brBrbr');
}
}
※Toggle wpautopを参考にしました。
上記のコードをbrBrbrプラグインに追記します。「?>」の上に追記すればよいかと思います。
補足:コメント部分のbrbrbr処理
remove_filter('comment_text', 'wpautop', 30);
add_filter('comment_text','brBrbr',30);
実は、コメント本文にもbrbrbr処理が入ってるのですが、この部分はコメントアウトして問題ないと思います。たぶんWordpress標準の「wpautop(自動整形)」が走っても、そんなにコメント欄は崩れないんじゃないかなぁと思います。実際に試してみてコメント欄が崩れないのなら、その路線で・・。
ダメな場合は、自身で方法を考えてみて?!
その2に続く
目標その1でカスタムフィールド_enable_brbrbrが1の時だけbrBrbrプラグインが動作するようにできました。また、あらかじめ過去の記事分の_enable_brbrbr=1のレコ
コメントを残す