TCD の PageBuilder は addfilter の the_content を使いまくる
TCD の PageBuilder は addfilter の the_content を使いまくる。
addfilter で the_content を使ってプラグインで何かしようと思うと、
PageBuilder を使ったページではうまく動かない。
TCD の PageBuilder は、ものすごく特殊で 投稿データを 連想配列に保存して、それをmetaデータで保存している。
そのため表示するとき、その連想配列のデータをブロックごとに読みだしてHTMLのブロックを作って送り出す。
つまり、ブロックが3つあると3回 the_content のフィルターに飛んでくる。
したがって普通に
add_filter( ‘the_content’,’show_navi_yuzu_proc’,1);
とかやると 3回飛んでくる上に、content が表示内容全体ではなくブロックごとに来るのだ。
その結果、ページの全体を見渡す the_content のフィルターは思った通りに動いてくれない。
ページ全体を見渡すプラグインを書くときには、こんな感じで書くといい。
要するに、TCD の PageBuilder は、page_builder_filter_the_content_after を入れたり出したりしながら各ブロックを作成して表示ブロックを作っている。
page_builder_filter_the_content_afterが存在しなくなった時点ですべての content が出来上がる。
なのでpage_builder_filter_the_content_afterがなくなった時点で自身の処理を発動すればいいということになる。
この記事が、あなたの参考になれば幸いです。
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 自身の処理系
page_builder_filter_the_content_afterが存在しなくなった時点ですべての content が出来上がる。
なのでpage_builder_filter_the_content_afterがなくなった時点で自身の処理を発動すればいいということになる。
この記事が、あなたの参考になれば幸いです。