検索フォームのテンプレートフックについて

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

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

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

    template-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
    いいねをした人: 居ません
    #20863
    Hatsuki
    閲覧者
    6

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

    サイドバー等のウィジェットで出している検索フォームに関してはフックが掛からないっぽいです。

    検索ウィジェットは 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
    いいねをした人: 居ません
    #51563
    mimi
    参加者
    15

    こんにちは。お世話になっております!
    ドロワーメニューの検索ボックスのプレースホルダーを書き換える必要があり、テンプレートをいじろうとしているのですが、このスレッドを読む限り、template-parts/common/search-form を上書きしても意味がなく、Snow Monkeyの検索ボックスはコアから上書きされていない、searchform.phpが存在してない状態なのでしょうか?
    ドロワーメニュー template-parts/nav/drawer.php 自体をごっそり取っ替える方が早いですか??
    ベストプラクティスがあれば教えていただけると助かります。

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

    えっと、ドロワーメニューの検索ボックスということだったら、それは

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

    あ、もしかしたらご存知かもしれませんが、デバックモードが有効(WP_DEBUGtrue)になっているのであれば、HTML のソースコード中に、実際にどのテンプレートが呼び出されているかが HTML コメントとして出力されます。開発環境ではデバッグモードを有効化しておくと便利です!

    3
    いいねをした人: 居ません
    #51586
    Kmical Lights
    閲覧者
    234

    私が元作っていた検索条件フォームの場合、
    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="検索 &hellip;"',
    		'<input type="search" placeholder="ホゲホゲ &hellip;"',
    		$_html
    	);
    	return $_html;
    }

    しかし、この get_search_form フックの問題は、サイト内の全検索部分に掛かってくるって事で
    ドロワーとかの検索フォームだけに掛けたいってのが難しい感じですね。

    > キタジマ氏
    最後に読まれたテンプレート名を取得できるような関数とかあれば、何とかなるかもですが、そう言うのって Snow Monkey のテンプレート系の処理でもやれましたっけ?

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

    @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
    いいねをした人: 居ません
    #51877
    mimi
    参加者
    15

    お返事遅くなってすみません!
    vendor/inc2734/wp-basis/src/view/searchform.php が見つけられなかったので混乱しておりました。

    今回の案件では
    template-parts/common/search-form-drawer.php を作成して対応しようと思います、ありがとうございます!
    デバックモードも初っ端から大活用中です。素晴らしい機能をありがとうございます。
    お陰で大分と構成の理解が進みました!

    1
    いいねをした人: 居ません
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • このトピックに返信するにはログインが必要です。

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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