-
投稿者投稿
-
2019年7月5日 11:43 AM #20689
トピックを新しく立てる方は次の項目も記述してください(要望トピックの場合は不要です)。
【お使いの Snow Monkey のバージョン】v7.2.0
【お使いのブラウザ】Safari
【当該サイトのURL】(公開できる場合は書いていただいたほうがスムーズです)===
add_filter( 'snow_monkey_get_template_part_template-parts/common/search-form-404' ...
とかならフックが効くようですが、
add_filter( 'snow_monkey_get_template_part_template-parts/common/search-form' ....
はフックが効かないようです。この場合、renderのフックでif文の分岐をするしかないでしょうか?検索フォームのフックを種類別に処理する際で、何か良い分岐方法があれば教えて欲しいと思います。
♥ 0いいねをした人: 居ません2019年7月6日 9:26 AM #20802template-parts/common/search-form-xxx.php
が僕の環境にはなかったので、試しに下記のコードを試してみたのですが、add_action( 'snow_monkey_get_template_part_template-parts/content/entry/content/content', function( $name, $vars ) { var_dump( $name ); ?> あいうえお <?php }, 10, 2 );
固定ページでは
string(3) "page" あいうえお
、404 ページではstring(3) "404" あいうえお
と、意図通り動いているようでした。‘snow_monkey_get_template_part_xxx` フックはフックが1つまでしかかけれない(2個目以降は無視される)のでそこに引っかかっているとかですかね?
なんらかアドオンをつくっている感じであれば、共有してもらえばこっちでも確認してみますよ!
追伸:
ちなみに ‘snow_monkey_get_template_part_xxxはアクションフックなので、
add_filterじゃなくて
add_action` するのが正しいです。♥ 0いいねをした人: 居ません2019年7月7日 12:02 AM #20863template-parts/common/search-form-xxx.php が僕の環境にはなかったので、試しに下記のコードを試してみたのですが、
んーと、ちょっとやりたい事が上手く出来ないと言うか何と言うか…
単純に検索フォームの位置を判別して置換を適用したいなと思ってます。ちょっとコードが適当ですが…
add_filter( 'snow_monkey_template_part_render', [ $this, '_template_part_render' ], 10, 4 ); public function _template_part_render( $html, $slug, $name, $vars ) { if ( 'template-parts/common/search-form' !== $slug ) { return $html; } echo $name; ob_start(); View::render( 'form/index' ); $form_html = ob_get_clean(); $html = mb_ereg_replace( '</form>', $form_html . '</form>', $html ); return $html; }
とした場合には、オーバーレイ時(overlay-search-box)、見つからない時(no-match)、404時(404)は$nameにも代入されて正しく反映されますが、
サイドバー等のウィジェットで出している検索フォームに関してはフックが掛からないっぽいです。
これをどうにかする場合、検索フォームの場合はget_search_form
を使えばいけるっぽいんですが…そうした場合、全検索フォームに対して引っかかるが、フォームの位置判断が出来ない。フックが1つまでしかかけれない(2個目以降は無視される)
ありゃ…それは気づかなかった…。と言うことは、自作してるアドオン系プラグインでは思い切り使ってるので他のプラグインで掛からなくなってたっぽいのもあったのかも。一度整理し直さないとですね…。ちょっと何か考えるとして、
snow_monkey_get_template_part_template-
は、なるべく使わないようにとりあえずの修正をすればって感じですか。
renderフックなら問題なさそうなので、そっち使います。> 追伸:
oh……適当に書いてしまってました。
まあ、開発中はfilterで書いて後から直すって事の方が多いです…(actionフックはfilterって書いても動くし)♥ 0いいねをした人: 居ません2019年7月8日 9:01 AM #20951サイドバー等のウィジェットで出している検索フォームに関してはフックが掛からないっぽいです。
検索ウィジェットは WordPress コアのものなので、
template-parts/common/search-form
経由では呼ばれてないんです。独自の検索フォームウィジェットをつくらないと難しいのかも…ですね。ありゃ…それは気づかなかった…。と言うことは、自作してるアドオン系プラグインでは思い切り使ってるので他のプラグインで掛からなくなってたっぽいのもあったのかも。一度整理し直さないとですね…。ちょっと何か考えるとして、snow_monkey_get_template_part_template-は、なるべく使わないようにとりあえずの修正をすればって感じですか。
それぞれのフックの意図としては、
–
snow_monkey_get_template_part_xxx
… テンプレートをつくらなくても、functions.php
などから中身を定義できる
–snow_monkey_template_part_render
… テンプレートの書き換えとなります。
snow_monkey_get_template_part_xxx
は書き換え用途ではなく、複数個フックした場合は最終のものだけが反映される形になって混乱するかなと思ったので、最初のだけ反映されるようにしています。なのでこれは基本エンドユーザーが使って、プラグインからは使わないほうがスマートかもしれませんね…。♥ 0いいねをした人: 居ません2020年5月20日 5:19 PM #51563こんにちは。お世話になっております!
ドロワーメニューの検索ボックスのプレースホルダーを書き換える必要があり、テンプレートをいじろうとしているのですが、このスレッドを読む限り、template-parts/common/search-form
を上書きしても意味がなく、Snow Monkeyの検索ボックスはコアから上書きされていない、searchform.phpが存在してない状態なのでしょうか?
ドロワーメニューtemplate-parts/nav/drawer.php
自体をごっそり取っ替える方が早いですか??
ベストプラクティスがあれば教えていただけると助かります。♥ 0いいねをした人: 居ません2020年5月21日 9:56 AM #51575えっと、ドロワーメニューの検索ボックスということだったら、それは
Helper::get_template_part( 'template-parts/common/search-form', 'drawer' );
というコードで呼び出されていて、実際に呼び出されるのは
template-parts/common/search-form.php
、その中身はget_search_form();
だけとなっています。なので、最も簡単なのは子テーマか My Snow Monkey の中に
template-parts/common/search-form-drawer.php
をつくって、オリジナルな検索フォームをつくる方法かなと思います。♥ 3いいねをした人: 居ません2020年5月21日 9:58 AM #51576あ、もしかしたらご存知かもしれませんが、デバックモードが有効(
WP_DEBUG
がtrue
)になっているのであれば、HTML のソースコード中に、実際にどのテンプレートが呼び出されているかが HTML コメントとして出力されます。開発環境ではデバッグモードを有効化しておくと便利です!♥ 3いいねをした人: 居ません2020年5月21日 11:00 AM #51586私が元作っていた検索条件フォームの場合、
get_search_form
にフックを仕掛けて変更してました。
多分、プレースホルダーでもこんな感じで置換すればいけるかと…。add_filter( 'get_search_form', [ __CLASS__, '_get_search_form' ], 9999, 1 ); static function _get_search_form( $_html ) { $_html = str_replace( '<input type="search" placeholder="検索 …"', '<input type="search" placeholder="ホゲホゲ …"', $_html ); return $_html; }
しかし、この
get_search_form
フックの問題は、サイト内の全検索部分に掛かってくるって事で
ドロワーとかの検索フォームだけに掛けたいってのが難しい感じですね。> キタジマ氏
最後に読まれたテンプレート名を取得できるような関数とかあれば、何とかなるかもですが、そう言うのって Snow Monkey のテンプレート系の処理でもやれましたっけ?♥ 3いいねをした人: 居ません2020年5月21日 3:20 PM #51608@Kmical Lights さん
最後に読まれたテンプレート名を取得できるような関数とかあれば、何とかなるかもですが、そう言うのって Snow Monkey のテンプレート系の処理でもやれましたっけ?
これはないですねー。今回の場合はドロワー内の検索ボックスは
Helper::get_template_part( 'template-parts/common/search-form', 'drawer' );
で読み込まれているので、
snow_monkey_template_part_render
でやるのであれば、下記のような感じで絞り込みできます。add_filter( 'snow_monkey_template_part_render', function( $html, $slug, $name ) { if ( 'template-parts/common/search-form' === $slug && 'drawer' === $name ) { return str_replace( ... ); } return $html; }, 10, 3 );
♥ 4いいねをした人: 居ません2020年5月28日 11:52 AM #51877お返事遅くなってすみません!
vendor/inc2734/wp-basis/src/view/searchform.php
が見つけられなかったので混乱しておりました。今回の案件では
template-parts/common/search-form-drawer.php
を作成して対応しようと思います、ありがとうございます!
デバックモードも初っ端から大活用中です。素晴らしい機能をありがとうございます。
お陰で大分と構成の理解が進みました!♥ 1いいねをした人: 居ません -
投稿者投稿
- このトピックに返信するにはログインが必要です。