サポート » 使い方全般 » 強制的に完全一致の検索をする検索ボックスは可能ですか?

  • general-template.php

    にある

    function get_search_form($echo = true) {
    	do_action( 'get_search_form' );
    
    	$search_form_template = locate_template(array('searchform.php'));
    	if ( '' != $search_form_template ) {
    		require($search_form_template);
    		return;
    	}
    
    	$form = '<form role="search" method="get" id="searchform" action="' . home_url( '/' ) . '" >
    	<div><label class="screen-reader-text" for="s">' . __('Search for:') . '</label>
    	<input type="text" value="' . get_search_query() . '" name="s" id="s" />
    	<input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" />
    	</div>
    	</form>';
    
    	if ( $echo )
    		echo apply_filters('get_search_form', $form);
    	else
    		return apply_filters('get_search_form', $form);
    }

    の部分で、
    <input type=”text” value=○○○○ >

    というようにすれば、検索ボックスに初期値を入れられますが、
    検索ボックスに初期値を入れずに、

    例えば、「検索 語」とボックスに入れると、
    ダブルクオーテーションで囲った状態、
    「”検索 語”」
    というような状態で常に検索するボックスをつくることは可能でしょうか?

    また、検索ボックスに「検索 語」を入れると、
    「”AAA:検索 語”」
    などのように、特定の言葉を検索語の前に置いて、完全一致で検索する、
    というような検索ボックスの作成は可能でしょうか。

    よろしくお願いします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター jim912

    (@jim912)

    Naoki-Joさん、こんにちは。

    initフックあたりで、$_REQUEST[‘s’]があり、ダルブクォートで囲まれていなければ、付加するようにしてはいかがでしょう。

    トピック投稿者 Naoki-Jo

    (@naoki-jo)

    ありがとうございます。
    フックについてよくわからないのですが、
    init
    のタイミングであるコードを実行したいという場合、

    function double_q() {
    
    ここにやりたい処理「YARITAIKOTO」を書く
    
    }
    add_action('init', 'double_q');

    というコードを、functions.php に書くと、
    init という処理が実行されるタイミングで、「YARITAIKOTO」
    というプログラムが実行されるという理解でいいんでしょうか。

    http://wpdocs.sourceforge.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7

    に書かれている順番で処理されるので、好きなタイミングで処理したければ、
    そのタイミングを
    add_action(‘〇〇’, ‘double_q’);
    の〇〇部分に記載するということなんでしょうか。

    モデレーター jim912

    (@jim912)

    Naoki-Joさん、こんにちは。

    御認識いただいているとおりです。
    1点、先のレスで間違いがあって、対象とすべき変数は、$_REQUESTではなくて、$_GETでした。

    function add_double_quote_search_query() {
    	$_GET['s'] = trim( $_GET['s'] );
    	if ( ! is_admin() && isset( $_GET['s'] ) ) {
    		if ( mb_substr( $_GET['s'], 0, 2 ) != '\"' || mb_substr( $_GET['s'], -2, 2 ) != '\"' ) {
    			$_GET['s'] = '\"' . $_GET['s'] . '\"';
    
    		}
    	}
    }
    add_action( 'init', 'add_double_quote_search_query' );

    $_GET[‘s’]の両端が、\"でなければ、追加するようになっています。バッククォートなのは、WordPressがデフォルトでバッククォートを追加する処理(addslashes)を行っているため、バッククォートがかけられた状態の文字列を追加するためです。

    トピック投稿者 Naoki-Jo

    (@naoki-jo)

    ありがとうございます。大変、勉強になります。
    そのコードを書くことによって、強制的に「””」を付けての検索は実現できました。

    ただ、ひとつ問題が起きているのですが、
    ホームページ(一番ルートになっているページ http://〇〇○)を表示するときに、
    強制的に、「””」の検索結果のページになってしまいます。

    その他の、ページ(http://〇〇○/〇〇)
    などでは大丈夫です。

    いろいろと教えていただいたコードをもとに、試してみましたが、
    原因がわかりません。

    何か解決方法はあるでしょうか。

    よろしくお願いします。

    モデレーター jim912

    (@jim912)

    Naoki-Joさん、こんにちは。

    すみません、コードの順序がただしくないため、常に$_GET[‘s’]が存在(検索されている状態)になっていました。下記が修正コードです。

    function add_double_quote_search_query() {
    	if ( ! is_admin() && isset( $_GET['s'] ) ) {
    		$_GET['s'] = trim( $_GET['s'] );
    		if ( mb_substr( $_GET['s'], 0, 2 ) != '\"' || mb_substr( $_GET['s'], -2, 2 ) != '\"' ) {
    			$_GET['s'] = '\"' . $_GET['s'] . '\"';
    
    		}
    	}
    var_dump( $_GET['s'] );
    }
    add_action( 'init', 'add_double_quote_search_query' );
    トピック投稿者 Naoki-Jo

    (@naoki-jo)

    jim912 さん

    ありがとうございます。
    早速、試してみたところ、

    var_dump( $_GET['s'] );

    の結果の値がホームページ上で表示されているようなので、
    削って以下の通りにしてみたら、
    思っていたような動きになりました。

    function add_double_quote_search_query() {
    	if ( ! is_admin() && isset( $_GET['s'] ) ) {
    		$_GET['s'] = trim( $_GET['s'] );
    		if ( mb_substr( $_GET['s'], 0, 2 ) != '\"' || mb_substr( $_GET['s'], -2, 2 ) != '\"' ) {
    			$_GET['s'] = '\"' . $_GET['s'] . '\"';
    
    		}
    	}
    
    }
    add_action( 'init', 'add_double_quote_search_query' );

    今のところ、問題なく動いているように見えますが、

    var_dump( $_GET['s'] );

    は抜いたらまずいようなものでしょうか。

    モデレーター jim912

    (@jim912)

    Naoki-Joさん

    たびたびすいません。コードの検証用のものなので、抜いてしまって問題ありません。

    トピック投稿者 Naoki-Jo

    (@naoki-jo)

    jim912 さん

    ありがとうございます。
    非常に助かりました!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「強制的に完全一致の検索をする検索ボックスは可能ですか?」には新たに返信することはできません。