TCD PageBuilder

TCD の PageBuilder は addfilter の the_content を使いまくる

TCD の PageBuilder は addfilter の the_content を使いまくる。

addfilter で the_content を使ってプラグインで何かしようと思うと、

PageBuilder を使ったページではうまく動かない。

TCD PageBuilder のデータ


TCD の PageBuilder は、ものすごく特殊で 投稿データを 連想配列に保存して、それをmetaデータで保存している。

そのため表示するとき、その連想配列のデータをブロックごとに読みだしてHTMLのブロックを作って送り出す。

つまり、ブロックが3つあると3回 the_content のフィルターに飛んでくる。

したがって普通に

add_filter( ‘the_content’,’show_navi_yuzu_proc’,1);

とかやると 3回飛んでくる上に、content が表示内容全体ではなくブロックごとに来るのだ。

その結果、ページの全体を見渡す the_content のフィルターは思った通りに動いてくれない。


TCD PageBuilder を使ったページの the_content フィルターの組み方


ページ全体を見渡すプラグインを書くときには、こんな感じで書くといい。
0001 add_filter(   'the_content','自作プラグイン関数名',10);
0002 /********************************************************/
0003 function 自作プラグイン関数名( $content )
0004 /********************************************************/
0005 {
0006  $post_id = get_the_ID();
0007  $use_page_builder = get_post_meta($post_id, 'use_page_builder', true);
0008  if($use_page_builder){
0009   if (has_filter('the_content', 'page_builder_filter_the_content')) {
0010    remove_filter('the_content', '自作プラグイン関数名');
0011    add_filter( 'the_content', '自作プラグイン関数名', 1000);
0012
0013    if (has_filter('the_content', 'page_builder_filter_the_content_after')) {
0014     return $content;
0015    }
0016   }
0017  }
0018  
0019 自身の処理系
要するに、TCD の PageBuilder は、page_builder_filter_the_content_after を入れたり出したりしながら各ブロックを作成して表示ブロックを作っている。

page_builder_filter_the_content_afterが存在しなくなった時点ですべての content が出来上がる。

なのでpage_builder_filter_the_content_afterがなくなった時点で自身の処理を発動すればいいということになる。

この記事が、あなたの参考になれば幸いです。
スポンサードリンク

関連記事一覧