テンプレート系フックの意図と最適解の考案 – Snow Monkey カスタマイズ

本記事は、Snow Monkey のテーマカスタマイズでよく使われているテンプレート系フックの意図や最適解などについて整理をしました。

最初に

先日、「Snow Monkey 公式サポートフォーラム」で Snow Monkey 開発者のキタジマタカシ氏から、フックに対する意見を頂きました。それをベースにテンプレート置換、定義、追加をプラグインでのカスタマイズで行う場合のフックの最適解についても整理をして考えてみました。

開発者が設計した、それぞれのフックの意図

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

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

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

外部プラグインの場合、snow_monkey_get_template_part_<slug> を使用非推奨ではなく使用しない

My Snow Monkey プラグイン」は、そのウェブサイトを彩る自分専用のプラグインなので、使用するのは非推奨ではありますが問題ないです。

snow_monkey_get_template_part_<slug> のフックは、最初のコールバック処理だけが反映されるようにされています。

その為、外部プラグインで開発する場合は、My Snow Monkey プラグインで該当フックの処理を設定することを想定すると、外部プラグインの該当処理を行うことはコールバックを複数にしてしまうことから使用できません。

キタジマ タカシ氏の意図も踏まえて考えた場合、外部プラグインを開発する場合にテンプレートの置換には snow_monkey_get_template_part_<slug> フックを使用することをしない方が良いです。

テンプレートの置換には、snow_monkey_template_part_render を使う

Snow Monkey v5 時代までは snow_monkey_get_template_part_<slug> フックを使用した書き換えでも問題ないような感じがありました。自分のウェブサイトのみで使う「My Snow Monkeyプラグイン」であれば、最初のコールバック処理だけが反映されるようにされていても、ほとんどのケースで大丈夫だからです。

しかし、外部プラグインへの移植、フックの意図から考えれば、テンプレートの置換に関する処理は、Snow Monkey v6 以降の場合は、すべて snow_monkey_template_part_render フックを使うのが意図や考えを踏まえた上での最適解でしょう。

snow_monkey_get_template_part_<slug> フックを使用する場合

テンプレートの置換では snow_monkey_template_part_render フックを使用する形になるとして、snow_monkey_get_template_part_<slug> フックは、どう言う場合に使用するのが良いと言うことなのかを整理します。

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

Snow Monkey 開発者 キタジマ タカシ氏の返答より

が、意図としてあります。なので、それが1つの解となります。

\Framework\Helper::get_template_part と組み合わせる

作っていないテンプレートは、別記事「Snow Monkey カスタマイズをはじめよう – 準備・基礎・初歩編」で解説を行っている \Framework\Helper::get_template_part 関数を使って呼び出すことができます。\Framework\Helper::get_template_part 関数で呼び出した場合は、テンプレートが無い場合でも該当のテンプレートを slug にした snow_monkey_get_template_part_<slug> フックがあれば、テンプレートがあるかのように処理されます。

また、Snow Monkey 標準で用意されているテンプレートの表示結果を別のオリジナルテンプレートパーツとしても使いたい場合は、 snow_monkey_get_template_part_<slug> フックと組み合わせることで新しくテンプレートを作る必要がありません。

外部プラグインではsnow_monkey_template_part_root_hierarchyも必要がない

My Snow Monkey プラグイン」の場合は、snow_monkey_template_part_root_hierarchy フックを使用していても全く問題ないでしょう。

しかし、それ以外の外部プラグインの場合、新しいテンプレートを生成する時は 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 ディレクトリ用フックを定義できます。

その為、配布するような外部プラグインの場合は、可能であれば WP Plugin View Controller を使用するのが良いと思っています。 WP Plugin View Controller は Snow Monkey テーマ外でも Snow Monkey テーマと同じようにテンプレートパーツ機能を使用しやすくしてくれます。

まとめ

My Snow Monkey プラグイン」を使用している場合は、フックの意図に関して深く考えなくてもカスタマイズ可能です。

しかし、それとは別に、他の方に配布する Snow Monkey カスタマイズプラグインを作る場合などは、フックの意図を正しく理解した上で開発しなければ、他のプラグインで置換できないなどの障害が発生します。フックの意図も考えた上で Snow Monkey をカスタマイズするようにしましょう。

この記事の筆者

Kmix39(ケミ)

電子の妖精。当ウェブサイトの記事制作などを行なっています。
金融・不動産・医療・教育などの数々の業種のシステム開発を経験を積み、スマートフォンアプリケーションと WordPress などのウェブアプリケーションを日々勉強中。