-
投稿者投稿
-
2019年3月29日 2:09 PM #12939
トピックを新しく立てる方は次の項目も記述してください(要望トピックの場合は不要です)。
【お使いの Snow Monkey のバージョン】v5.4.8
【お使いのブラウザ】Safari
【当該サイトのURL】(公開できる場合は書いていただいたほうがスムーズです)
フックの場合、コメントエリアの置換が正しくできないようで困っているので質問させてください。
add_action( 'plugins_loaded', function() { add_filter( 'snow_monkey_get_template_part_template-parts/discussion/comment', 'customize_comment_area', 10, 2 ); } ); function customize_comment_area( $_slug, $_vars ) { $is_removed = remove_filter( 'snow_monkey_get_template_part_template-parts/discussion/comment', 'customize_comment_area', 10, 2 ); if ( $is_removed ) { ob_start(); \Framework\Helper::get_template_part( 'template-parts/discussion/comment', null, $_vars ); $_html = ob_get_clean(); // いいね!ボタンなどの各コメントのコミュニティ化プラグインの設定と置換 echo $_html; } }
としているのですが、コメントエリアが最初の1つしか表示されず困ってます。
remove_filterをしている為に以後のコメントが呼び出されないんじゃないかと言う感じなのですが、
remove_filterを行わないと\Framework\Helper::get_template_part
が同じテンプレートを呼んで同一のフックを動作させて…の無限ループとなる為に行っています。今は子テーマで対策をしましたが、上手くフックをする方法はありますでしょうか?
♥ 0いいねをした人: 居ません2019年3月29日 2:44 PM #12940あーそうですね。
snow_monkey_get_template_part_xxx
をremove_filter
することで、2回目以降のsnow_monkey_get_template_part_xxx
が呼ばれず表示されない、となりますね…。一応下記のコードで動作するようになると思います。
add_filter( 'snow_monkey_get_template_part_template-parts/discussion/comment', 'customize_comment_area', 10, 2 ); function customize_comment_area( $_name, $_vars ) { $is_removed = remove_filter( 'snow_monkey_get_template_part_template-parts/discussion/comment', 'customize_comment_area', 10, 2 ); if ( $is_removed ) { remove_action( 'inc2734_view_controller_get_template_part_template-parts/discussion/comment', '__return_true' ); ob_start(); \Framework\Helper::get_template_part( 'template-parts/discussion/comment', null, $_vars ); $_html = ob_get_clean(); // いいね!ボタンなどの各コメントのコミュニティ化プラグインの設定と置換 echo $_html; add_filter( 'snow_monkey_get_template_part_template-parts/discussion/comment', 'customize_comment_area', 10, 2 ); } }
が、内部の内部まで考慮して記述することになり、Snow Monkey のアップデートによる変更にめちゃめちゃ弱いと思います。このような使い方は結構想定されることだと思うので、もうちょっと
Helper::get_template_part()
の処理なりフックなりを整理したほうが良いかもですね…。パッと思いついたのだと、フックを有効にするかどうかを指定できる第4引数を追加するとか、
snow_monkey_get_template_part_xxx
フックをアクションフックじゃなくてフィルターフックにするとか…。うーん、どっちも微妙な気はするのでもうちょっと考えてみます。なにか良いアイデアがあればぜひコメントくださいまし…。♥ 0いいねをした人: 居ません2019年3月29日 3:17 PM #12945そうか、フックの状況をみて Snow Monkey 側で自動的に
remove_action( 'inc2734_view_controller_get_template_part_template-parts/discussion/comment', '__return_true' );
するようにしとけばわりと素直ですかね。あと、
inc2734_view_controller_template_part_render
という最終出力を書き換えられるフックがあるので、前後に要素を足したいだけならそれを使うのが良いかもです(これも、ラップしてsnow_monkey_template_part_render
フックを作ったほうが統一性的に良さそうですが)。♥ 0いいねをした人: 居ません2019年3月29日 3:21 PM #12946有難うございます。
プラグインの設定などを書いても綺麗に動作致しました。内部の内部まで考慮する必要があるんですね。
うーん…ちょっとこちらでも考えてみます。
トピックとは別の事なので、アイデアを思いついたらまた別トピックを立てるかコミュニティの方で書きますね。♥ 0いいねをした人: 居ません2019年3月29日 3:40 PM #12949あと、
inc2734_view_controller_template_part_render
という最終出力を書き換えられるフックがあるので、前後に要素を足したいだけならそれを使うのが良いかもです(これも、ラップしてsnow_monkey_template_part_render
フックを作ったほうが統一性的に良さそうですが)。とりえあず上記はやります!
トピックとは別の事なので、アイデアを思いついたらまた別トピックを立てるかコミュニティの方で書きますね。
もし思いついたときはぜひ。助かります!
♥ 0いいねをした人: 居ません2019年3月29日 6:55 PM #12957すみません、ちょっと打ち合わせでドタバタしていた為に、すれ違いでいただいていた返信確認が出来ていませんでした。
こちらのトピックで書かれていましたので、この部分だけ返信の形にします。remove_action( ‘inc2734_view_controller_get_template_part_template-parts/discussion/comment’, ‘__return_true’ );
こちら、自動的にではなく、明示的に実行させるフックもあれば良いと思います。
\Framework\Helper::ほにゃらら('template-parts/discussion/comment');
みたいな形で、remove_action
がされるなら、
統一性や内部が変更される際の影響も減るのではないでしょうか?
自動的にだけでは無い理由として、同一のテンプレート以外であっても、読み込む前にremoveする事をしたい時がある為です。snow_monkey_template_part_render
については、後ほどこちらの方で調べてみますね。♥ 0いいねをした人: 居ません2019年3月29日 9:50 PM #12959本来
remove_action( 'inc2734_view_controller_get_template_part_template-parts/discussion/comment', '__return_true' );
の部分(というかこのフックを外すという処理自体)はユーザーが知る必要がない部分なので、こういう処理があるということを想像しながらコードを書かせること自体が NG だと思うのです。これは内部処理の都合で必要なだけなので、もしかしたら将来的になくなる処理かもしれないですし。なのでここは自動でやっちゃうのが適切だと思います。自動的にだけでは無い理由として、同一のテンプレート以外であっても、読み込む前にremoveする事をしたい時がある為です。
ちょっとどういう処理を想定しているのかが想像できず申し訳ないのですが、別な方法で対応できる or するべきな気がします。
♥ 0いいねをした人: 居ません2019年11月6日 5:26 PM #34009現在ではrenderフックなどで簡単に置換できるようにもなりましたし、解決していますね。
クローズします。♥ 0いいねをした人: 居ません -
投稿者投稿
- トピック「コメントエリアの置換について」には新しい返信をつけることはできません。