検索結果にカスタム投稿も含ませる

/ 検索結果から固定ページを除外
function search_filter($query) {
  if (!$query -> is_admin && $query -> is_search) {
    $query -> set('post_type', array('post','asobu','share','seikatsu','iryou','manabu','koukyou','ofuroyado'));
  }
  return $query;
}
add_filter('pre_get_posts', 'search_filter');
function filter_search($query) {
    if ($query->is_search) {
	$query->set('post_type', array('post', 'hogehoge'));
    };
    return $query;
};
add_filter('pre_get_posts', 'filter_search');

こんなコードあったが必要なのかどうか今はいらない?

カスタムポストUIに
検索結果から除外する ture false があったが
かわったのか???
未深検証

編集中 絞り込み検索

<form action="<?php echo home_url(); ?>" method="get">
    <ul>
        <li><?php wp_dropdown_categories(array(
		'taxonomy' =>  'chiiki2',
            'show_option_all' => 'すべてのカテゴリーを含む'
        )); ?></li>
        <li><select name="tag">
            <option value="">タグを選択</option>
            <?php
            $tags = get_tags();
            foreach ($tags as $tag): ?>
                <option value="<?php echo esc_attr($tag->slug); ?>"><?php echo esc_html($tag->name); ?></option>
            <?php endforeach; ?>
        </select></li>
       <li> キーワード:<input type="text" value="" name="s" /></li>
   </ul>
   <input type="submit" value="この内容で検索!" />
</form>

http://mypacecreator.net/blog/archives/1807

http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_dropdown_categories
↑よりさらに詳しく

階層を維持

'hierarchical' => '1',

search.phpでユーザー名とか、タグ名・カテゴリ名も検索対象その2

https://gist.github.com/wokamoto/3486944

ファンンクションにこれを追加

function custom_search($search, $wp_query) {
	global $wpdb;
 
	//サーチページ以外だったら終了
	if (!$wp_query->is_search)
		return $search;
	if (!isset($wp_query->query_vars))
		return $search;
 
	// ユーザー名とか、タグ名・カテゴリ名も検索対象に
	$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
	if ( count($search_words) > 0 ) {
		$search = '';
		foreach ( $search_words as $word ) {
			if ( !empty($word) ) {
				$search_word = $wpdb->escape("%{$word}%");
				$search .= " AND (
 {$wpdb->posts}.post_title LIKE '{$search_word}'
 OR {$wpdb->posts}.post_content LIKE '{$search_word}'
 OR {$wpdb->posts}.post_author IN (
   SELECT distinct ID
   FROM {$wpdb->users}
   WHERE display_name LIKE '{$search_word}'
   )
 OR {$wpdb->posts}.ID IN (
   SELECT distinct r.object_id
   FROM {$wpdb->term_relationships} AS r
   INNER JOIN {$wpdb->term_taxonomy} AS tt ON r.term_taxonomy_id = tt.term_taxonomy_id
   INNER JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id
   WHERE t.name LIKE '{$search_word}'
     OR t.slug LIKE '{$search_word}'
     OR tt.description LIKE '{$search_word}'
   )
) ";
			}
		}
	}
 
	return $search;
}
add_filter('posts_search','custom_search', 10, 2);

search.phpでタグ・タームを検索結果にその1

<?php //タグ・ターム
 
//検索キーワードを取得
$keys = get_search_query();
//スペースが全角の場合、半角に変換
$keys = str_replace(' ', ' ', $keys);
//SQLインジェクション用
$keys = mysql_real_escape_string($keys);
//検索キーワードを配列に変換
$keys_array = explode(' ', $keys);
 
//キーワードの数だけWHERE節を作成する
$sql_where = '';
foreach ($keys_array as $key => $value) {
  if(empty($sql_where)){
    $pre_str = 'WHERE ';
  }else{
    $pre_str = 'AND ';
  }
  $sql_where .= $pre_str . "(0<LOCATE('{$value}',posts.post_title) OR 0<LOCATE('{$value}',t_terms.name) OR 0<LOCATE('{$value}',t_terms.slug)) ";
}
 
//クエリを実行  
$objResult = $wpdb->get_results(
  $wpdb->prepare(
    "SELECT * FROM {$wpdb->posts} posts LEFT JOIN {$wpdb->term_relationships} t_rel  ON posts.ID = t_rel.object_id
    LEFT JOIN {$wpdb->term_taxonomy} t_term_tx ON t_rel.term_taxonomy_id = t_term_tx.term_taxonomy_id  
    LEFT JOIN {$wpdb->terms} t_terms ON t_term_tx.term_id = t_terms.term_id 
    "
    . $sql_where
));
 
 
//検索結果が0でなければ、ヒットした投稿のIDを指定してquery_postsで抽出する。
 
if (!empty($objResult)){
   
  $id_array = '';
  $i=0;
  foreach ($objResult as $key => $value) {
    $id_array[$i] = $value->ID;
    $i++;
  }
   
  $arg = array(
    'post__in'=>$id_array,
    'post_type'=>'performer' //対象のカスタム投稿タイプ
  );
   
  $posts = query_posts( $arg );
 
}
 
//検索結果が0なら、query_postsを行わない。その場合、標準の検索機能が自動的に動作する。
//そのため、何もヒットしなければ、標準の「ヒットしませんでした」画面も自動的に表示される。
 
?>

以下ループ

http://masaroku.com/?p=788 参考