できる!Snow Monkey カスタマイズ – テンプレート系フックの最適解を考える

この記事は、不定期連載「できる!Snow Monkey カスタマイズ 」の第6回目です。

先日、Snow Monkeyフォーラムで作者のキタジマさんからフックに対する意見を頂いたので、それをベースにテンプレート置換、定義、追加をプラグインでのカスタマイズで行う場合のフックの最適解を考えてみました。

作者が設計したそれぞれのフックの意図…

それぞれのフックの意図としては、
– snow_monkey_get_template_part_xxx … テンプレートをつくらなくても、 functions.php などから中身を定義できる
– snow_monkey_template_part_render … テンプレートの書き換え
となります。

 snow_monkey_get_template_part_xxx は書き換え用途ではなく、複数個フックした場合は最終のものだけが反映される形になって混乱するかなと思ったので、最初のだけ反映されるようにしています。なので、これは基本エンドユーザーが使って、プラグインからは使わないほうがスマートかもしれませんね…。

Snow Monkeyフォーラム内トピック – キタジマタカシさんの返信より

1 – 外部プラグインはsnow_monkey_get_template_part_xxxを使用非推奨とする

My Snow Monkeyプラグイン以外で外部プラグインを作る場合、 snow_monkey_get_template_part_xxxのフックは、最初のだけ反映されるようにしている事から外部プラグインで適用してしまうとMy Snow Monkeyプラグインで該当フックが適用できなくなってしまいます。
逆に、My Snow Monkeyプラグインで適用してしまうと、外部プラグインでは動作が適用されなくなり、それによる問題が起こってしまうでしょう。

その為、外部プラグインではsnow_monkey_get_template_part_xxxフックを使用しない事をルールにするのが良いと思われます。

テンプレートの置換には、snow_monkey_template_part_renderが最適解?

これまでの記事ではsnow_monkey_get_template_part_xxxフックを使用した書き換えを紹介してきていましたが、My Snow Monkeyプラグインでカスタマイズを行う(エンドユーザーが使う)場合、そのフックを使用する形でも大丈夫です。
しかし、外部プラグインへの移植やフックの意図を考えた際を思うと、テンプレートの置換に関する処理は、すべてsnow_monkey_template_part_renderフックを使うのが最適解なのかもしれません。

2 – snow_monkey_get_template_part_xxxフックを使用する場合

テンプレートの置換ではsnow_monkey_template_part_renderフックを使用する形になるとして、ではsnow_monkey_get_template_part_xxxフックはどう言う場合に使用するのが良いのでしょうか?

テンプレートをつくらなくても、 functions.php などから中身を定義できる

とは、どう言う場合でしょうか?

\Framework\Helper::get_template_partと組み合わせるのが最適解?

それは、第一回で解説を行った\Framework\Helper::get_template_partを使う場合に楽が出来るのです。\Framework\Helper::get_template_partで呼び出した場合、テンプレートが無い場合でも該当のパーツ名に対応したsnow_monkey_get_template_part_xxxフックがあれば、そのフックの結果を処理します。
その為、別のテンプレートを置換した結果を別のテンプレートパーツとして使いたい場合などに、新しく余分なテンプレートを作らずにsnow_monkey_get_template_part_xxxフックと組み合わせる事でそれらを定義した形で生成できるのです。

3 – 外部プラグインではsnow_monkey_template_part_root_hierarchyも非推奨?

My Snow Monkeyプラグインの場合は全く問題ないと思います。

しかし、それ以外の外部プラグインの場合で、新しいテンプレートを生成する場合はsnow_monkey_template_part_root_hierarchyを使用してプラグインのrootディレクトリを加えるのではなく、キタジマタカシさんの制作されたWP Plugin View Controllerを用いて適用を行う方が良いのではないかと思っています。

WP Plugin View Controller

WP Plugin View Controllerを使用するのが最適解?

きちんとした使用方法があまり書かれてませんが、WP Plugin View Controllerで定義した場合は、snow_monkey_template_part_root_hierarchyとは別にプラグイン用のrootディレクトリ用フックを定義できますのでそれを使用するのが良いと思っています。
Snow Monkeyテーマ外で追加された独自のテンプレートパーツと言うのも理解しやすくなります。

それぞれの最適解の実例や失敗ケースは今後解説していきます

ちょっと、考えるだけの読むのも難しい記事になってしまいました。
しかし、My Snow Monkeyを使用したテーマカスタマイズだけであれば問題ありませんが、これらの事を考えなければ外部のプラグインを制作すると言うのはちょっと今のSnow Monkeyでは難しい部分もあります。

これらのケースを考慮した上で、カスタマイズプラグインをMy Snow Monkeyプラグインとは別に作る実例などは次回から解説を続けていきます。