【WordPress】脱「brBrbr」プラグイン 【その1】

目標

・過去の記事に対しては、「brBrbr」プラグインを適用する
・新規の記事に対しては、適用しない

こんな感じの共存環境をまず作ろうというのが「その1」です。

参考になるプラグイン

Toggle wpautop
簡単に投稿ごとに 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に続く

【WordPress】脱「brBrbr」プラグイン 【その2】
目標その1でカスタムフィールド_enable_brbrbrが1の時だけbrBrbrプラグインが動作するようにできました。また、あらかじめ過去の記事分の_enable_brbrbr=1のレコ
スポンサーリンク
コメント一覧
  • 名前:管理人 :

    コメントは、まだありません。