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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?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 参考