アドオンプラグインのtemplatesを上書きしたい

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

    優先度はかなり低いのですが、
    テーマは子テーマでも本来は上書きできるのですが、プラグインの上書きって元のプラグインを変更する場合は、更新をすると変更点を更新されてしまうので、別のプラグインを作って中の処理を変えなければ出来ませんよね?
    bbpress-supportやmember-postのアドオンプラグインについても、元のプラグインを変更することなくtemplatesを他のプラグインなどで上書き出来れば良いなと思いました。
    難しいでしょうか?

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

    Member Postの方は、多分このフィルターで出来るのかなと思ったのですが、

    
    $template_path = apply_filters( 'snow_monkey_member_post_tepmlate_path', $template_path, $slug );
    

    フィルタ名が誤字ってしまっているようでした…(>.<
    こちらも合わせてご報告いたします……。

    また、このフックで変更出来ますでしょうか?

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

    言われてみて、確かにプラグイン版の get_template_part() みたいなのを Snow Monkey に持たせておけば、各アドオン間でビューの呼び出し方法を共通化できるし共通のカスタマイズ手法も提供できるので良いかなと思ったのですが、とはいえテーマの範疇でもないきがして、ちょっと悩むところですね。

    テーマに持たせずに小さな composer のライブラリとしてつくって、各アドオンでそれを使うというのはアリかもなと思ったり…。

    Member Postの方は、多分このフィルターで出来るのかなと思ったのですが、

    です! Snow Monkey Member Post v1.1.6 で正しい綴りに修正しました。間違った綴りにあわせてフックさせている場合は変更してください!

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

    テーマの範疇でもない

    プラグインの範疇でも無い想定外の事を私の制作の方でやっちゃってるので、難しく考えることになっちゃって…申し訳ないです。

    プラグインを幾つも作った際に、 snow_monkey_template_part_root のフックを掛けちゃうと、Rootの取り合いになっちゃう為に上手く動作しなくなっちゃうから、配布するとか拡張目当ての共通プラグインでは使わないようにする等の注意は必要かなと思ったりしています。
    slug などで分岐はできるのですが、同じテンプレートの場合は、優先度が高い低い関係なく最後に設定された return の値に合わせられてしまいますよね?

    また、 Helper::get_template_part でフックしている template_parts を呼び出すと、その呼び出したテンプレートが同 filter をフックをしている場合は、無限ループに陥るので、それも remove_filter で消したりする必要があるようなのですが、 remove_filter って無名関数とか使えない(?)ので、ちょっとそこだけ別 function で記述するなど、ややスムーズにならないーとか考えてしまっています…。

    上手くお互いのプラグインを上書きできる仕組みって、それこそテーマの範疇じゃないのですが、今後、そういうのも上手く使えるようになると嬉しいです。
    ただ、他のテーマにない事でもありますし、ゆっくりと私の制作の方でも試行錯誤しながら良案を模索していければ良いなと思います。

    Snow Monkey Member Post v1.1.6 で正しい綴りに修正しました。
    ありがとうございます!メンバー限定のテンプレートフックなども色々試していきます!

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

    プラグインを幾つも作った際に、 snow_monkey_template_part_root のフックを掛けちゃうと、Rootの取り合いになっちゃう為に上手く動作しなくなっちゃうから、配布するとか拡張目当ての共通プラグインでは使わないようにする等の注意は必要かなと思ったりしています。

    ぐわーそうか、もともと「子テーマの代替」で考えていたので、ちょっとそこ配慮が不足していました。単一のルートを返すのではなく、配列にして、そのルートにあれば使う、なければ次のルートを使う、みたいなフックのほうが良さそうですね。いまさら snow_monkey_template_part_root を変更するとちょっと影響が大きそうなので、別なフックを追加する等で良い感じにできないか試行錯誤してみます。

    slug などで分岐はできるのですが、同じテンプレートの場合は、優先度が高い低い関係なく最後に設定された return の値に合わせられてしまいますよね?

    ですね。フックは一般的には優先度が高いものほど後で実行されるだったかなと思います。

    また、 Helper::get_template_part でフックしている template_parts を呼び出すと、その呼び出したテンプレートが同 filter をフックをしている場合は、無限ループに陥るので、それも remove_filter で消したりする必要があるようなのですが、 remove_filter って無名関数とか使えない(?)ので、ちょっとそこだけ別 function で記述するなど、ややスムーズにならないーとか考えてしまっています…。

    ちょっと「また、Helper::get_template_partでフックしているtemplate_partsを呼び出すと、その呼び出したテンプレートが同filterをフックをしている場合は、無限ループに陥る」を具体的に想像できなかったのですが、確かに remove_filter() は無名関数消せないですね…。

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

    具体的に想像できなかったのですが、確かに remove_filter() は無名関数消せないですね…。

    template-parts/common/infobarだと、その中で呼ばれているので、こんな感じでしょうか?

    
    add_filter(
    'snow_monkey_get_template_part_template-parts/common/infobar',
    function( $name, $vars ) {
        ob_start();
        \Framework\Helper::get_template_part( 'template-parts/common/infobar' );  // このフックが呼ばれ続けるので無限ループに
        $html = ob_get_clean();
        echo $html;
    },
    10,
    2
    );
    
    0
    いいねをした人: 居ません
    #11000
    アバター画像キタジマ タカシ
    参加者
    2421

    あ、なんというか、そういうことをしないといけないシチュエーションが思い浮かばない…という感じでして。単純に中でテンプレートを呼びだしたいだけだとしたら、

    add_filter(
        'snow_monkey_get_template_part_template-parts/common/infobar',
        function( $name, $vars ) {
            ob_start();
                \get_template_part( 'template-parts/common/infobar' );
                $html = ob_get_clean();
                echo $html;
        },
        10,
        2
    );

    のように、コアの get_template_part() を使うのはどうでしょう?

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

    コアの get_template_part() を使うのはどうでしょう?
    そういうことをしないといけないシチュエーションが思い浮かばない

    確かに、コアのget_template_part()を使うと、思い浮かばなかったです……

    ただ、一つ思ったのですが…

    コアのget_template_part()を使った場合は、my_snow_monkeyで、templateのrootをフックで変更して、置換した場合、別のプラグインは、my_snow_monkeyで変更されたtemplateファイルを取れないのかなと。
    多分ですが、別のプラグインでは、コアのget_template_partを使ってしまうと問題が起こるんじゃないかなと思っています。
    my_snow_monkey以外の他のプラグインでは、コアのget_template_partを使ってしまうと、テーマ側のファイルを見てしまうので、my_snow_monkeyに置かれているtemplateのファイルを参照しない…と言うことにならないでしょうか?
    それがHelperを使ったget_template_partだとrootが設定されているので、他のプラグインでもmy_snow_monkeyのtemplate_partsを見ますし、それが無い場合は最終的にはテーマ側のtemplate_partsを参照するので、正しくmy_snow_monkeyの上書き結果を他のプラグインも見れるんじゃと思ってます。
    単純にHelper::get_template_part()で呼び出すと、無限ループするtemplate_partsもあると言うだけで全てが使えない訳でもないですが、ちょっと注意が必要かなと言う感じです。Helper::get_template_part()で呼び出した場合でも、その呼び出しているフックを無限ループにならないように、removeしてあげれば使えますし、実際には今のままでも問題はないです。

    ただ、そう考えながら、今、フォーラムに書いてて気づいたのですが、
    そもそもtemplate_partsのフックしたhtmlって複数のプラグインで結果を共有して置換出来ないんじゃ……と。
    my_snow_monkeyでフックしてAをBに置換とした場合、別のプラグインで優先度を下げてそのフックのCをDに置換しても、置換後のhtmlを取れていないので、AをBに置換した結果ってget_template_part()で取得したhtmlで反映できないんじゃ…と今、思いました。
    2つ以上のプラグインで置換した場合の結果って、最終的にフックを掛けたCをDにすると言う結果だけが表示されるのかなって。

    これも、もともと「子テーマの代替」で考えていたキタジマさんの設計思想をかなり無視して難しく勝手に考えている事でもあります。申し訳ありません。
    これもまた想定外のことを難しく勝手に考えてしまっているだけかもしれません…。

    しかし、フックで上書きを使い、2つ以上のプラグインで拡張させてみると言う考えはまだ捨てず、上手くプラグイン同士が両立出来る仕組みをもう少し試行錯誤してみたいとも思っています。

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

    そもそもtemplate_partsのフックしたhtmlって複数のプラグインで結果を共有して置換出来ない

    後から優先度の問題だったことに気づきまして、複数のプラグインでも結果を共有した形で置換出来ました。
    上書きする際は優先度を9999など高くして一番最初に上書きさせる、カスタマイザーなどの場合や置換の場合など10より低くしたりする事で、先にSnow Monkeyが読み込んでいるフック処理などを実行させるなどする事で正しく反映が出来ました。
    こちら、多数のプラグインで結果を上書きできるのを確認できましたので、こちらの問題はスルーしてください。。。

    また5.3.0からのsnow_monkey_template_part_root_hierarchyフックの追加、ありがとうございます。
    そのフックと、検索ボックスのテンプレートパーツとして呼び出すアップデートとカスタム投稿ではtemplates/view/content-XXX.phpが呼び出される仕様などから、
    template_partsにプラグインからもっと上手くフックを使って色々出来ないかとか試したい事も増えましたので、
    色々と試したいと思います。試した結果などは、今後何らかの形でお伝えできればと思います。

    ほぼ解決できたのではないかと思えるので、一度このトピックを閉じさせていただきます。

    0
    いいねをした人: 居ません
9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • トピック「アドオンプラグインのtemplatesを上書きしたい」には新しい返信をつけることはできません。

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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