<?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 参考