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