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