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