コメントエリアの置換について

0
いいねをした人: 居ません
  • このトピックには7件の返信、2人の参加者があり、最後にHatsukiにより5年、 1ヶ月前に更新されました。
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • 投稿者
    投稿
  • #12939
    Hatsuki
    閲覧者
    6

    トピックを新しく立てる方は次の項目も記述してください(要望トピックの場合は不要です)。

    【お使いの 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
    いいねをした人: 居ません
    #12940
    アバター画像キタジマ タカシ
    参加者
    2464

    あーそうですね。 snow_monkey_get_template_part_xxxremove_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
    いいねをした人: 居ません
    #12945
    アバター画像キタジマ タカシ
    参加者
    2464

    そうか、フックの状況をみて 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
    いいねをした人: 居ません
    #12946
    Hatsuki
    閲覧者
    6

    有難うございます。
    プラグインの設定などを書いても綺麗に動作致しました。

    内部の内部まで考慮する必要があるんですね。
    うーん…ちょっとこちらでも考えてみます。
    トピックとは別の事なので、アイデアを思いついたらまた別トピックを立てるかコミュニティの方で書きますね。

    0
    いいねをした人: 居ません
    #12949
    アバター画像キタジマ タカシ
    参加者
    2464

    あと、 inc2734_view_controller_template_part_render という最終出力を書き換えられるフックがあるので、前後に要素を足したいだけならそれを使うのが良いかもです(これも、ラップして snow_monkey_template_part_render フックを作ったほうが統一性的に良さそうですが)。

    とりえあず上記はやります!

    トピックとは別の事なので、アイデアを思いついたらまた別トピックを立てるかコミュニティの方で書きますね。

    もし思いついたときはぜひ。助かります!

    0
    いいねをした人: 居ません
    #12957
    Hatsuki
    閲覧者
    6

    すみません、ちょっと打ち合わせでドタバタしていた為に、すれ違いでいただいていた返信確認が出来ていませんでした。
    こちらのトピックで書かれていましたので、この部分だけ返信の形にします。

    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
    いいねをした人: 居ません
    #12959
    アバター画像キタジマ タカシ
    参加者
    2464

    本来 remove_action( 'inc2734_view_controller_get_template_part_template-parts/discussion/comment', '__return_true' ); の部分(というかこのフックを外すという処理自体)はユーザーが知る必要がない部分なので、こういう処理があるということを想像しながらコードを書かせること自体が NG だと思うのです。これは内部処理の都合で必要なだけなので、もしかしたら将来的になくなる処理かもしれないですし。なのでここは自動でやっちゃうのが適切だと思います。

    自動的にだけでは無い理由として、同一のテンプレート以外であっても、読み込む前にremoveする事をしたい時がある為です。

    ちょっとどういう処理を想定しているのかが想像できず申し訳ないのですが、別な方法で対応できる or するべきな気がします。

    0
    いいねをした人: 居ません
    #34009
    Hatsuki
    閲覧者
    6

    現在ではrenderフックなどで簡単に置換できるようにもなりましたし、解決していますね。
    クローズします。

    0
    いいねをした人: 居ません
8件の投稿を表示中 - 1 - 8件目 (全8件中)
  • トピック「コメントエリアの置換について」には新しい返信をつけることはできません。

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。