サイト内検索時にフリーワードとその他条件の併用ができない
-
お世話になります。
サイト内絞込み検索の実装を試みておりますが、表題の通りで、フリーワード入力時にカテゴリやカスタムフィールドなどの条件が併用できずに行き詰っています。
テーマはstinger3をカスタマイズして利用しています。
以下、コードです。■検索フォーム
<form id="searchform" name="sitesearch" action="<?php echo home_url(); ?>/" method="get"> <input name="s" id="s" type="text" /> <input id="submit" type="submit" name="submit" value="検索" /> <input id="カスタムフィールド1" type="checkbox" name="カスタムフィールド1" value="on">カスタムフィールド1 <input id="カスタムフィールド2" type="checkbox" name="カスタムフィールド2" value="on">カスタムフィールド2 カテゴリ:<?php $selectcatnum = $_POST["cat"]; $selectcatnum_op = 'show_option_all=指定しない&hide_empty=0&depth=1&hierarchical=1&exclude=1&title_li=&selected=' .$selectcatnum; wp_dropdown_categories( $selectcatnum_op ); ?></p> </form>
■function.php(関連しそうな部分を抜粋)
global $my_public_query_vars; $my_public_query_vars = array( 'カスタムフィールド1', 'カスタムフィールド2' ); function my_query_vars( $public_query_vars ) { global $my_public_query_vars; return array_merge( $public_query_vars, $my_public_query_vars ); } add_filter( 'query_vars', 'my_query_vars' ); function my_pre_get_posts( $query ) { if ( ! is_admin() ) { $meta_query = array(); global $my_public_query_vars; foreach ( $my_public_query_vars as $key ) { if ( $val = $query->get( $key ) ) { $meta_query[] = array( 'key' => $key, 'value' => $val, ); } } if ( ! empty( $meta_query ) ) { $query->set( 'meta_query', $meta_query ); } } } add_action( 'pre_get_posts', 'my_pre_get_posts' ); function SearchFilter($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','SearchFilter'); function custom_search($search, $wp_query ) { //query['s']があったら検索ページ表示 if ( isset($wp_query->query['s']) ) $wp_query->is_search = true; return $search; } add_filter('posts_search','custom_search', 10, 2);
■検索時の挙動
「カスタムフィールド+カテゴリ」で検索した場合、正常に検索結果が表示されます。
「フリーワード+カテゴリ」で検索した場合、選択したカテゴリは無視され、フリーワードのみでの検索結果が表示されます。
「フリーワード+カスタムフィールド」で検索した場合、条件に合致していても検索結果は0件となります。お手数ですが、問題の解決策またはアドバイス等いただけましたら幸いです。
よろしくお願いいたします。
- トピック「サイト内検索時にフリーワードとその他条件の併用ができない」には新たに返信することはできません。