WordPressでプラグインにて作成したテーブルも検索条件に含めたいと思っていたのだが、方法がわかったので記載する。最初は、検索したというフックがあるのかな〜と思っていろいろ探していたのだが、そんなものは見当たらず。
そしたらありましたよ!本家に書いてありました。
// 仮想プラグインhogeです
array_filter('posts_join', 'hoge_search_join');
array_filter('posts_where', 'hoge_search_where');
function hoge_search_join($join){
global $wpdb, $hoge_db; // $hoge_dbはプラグイン用dbクラス
if(is_search()){ // 検索のときのみテーブルを連結する
$join .= " LEFT JOIN {$hoge_db->table} ON " . $wpdb->posts . ".ID = " . $hoge_db->table . ".post_id ";
}
return $join;
}
function hoge_search_where($where){
global $wpdb, $hoge_db;
if(is_search()){ // 検索のときのみ検索条件を追加する
$where = preg_replace(
"/\(\s*{$wpdb->posts}.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"({$wpdb->posts}.post_title LIKE \\1) OR "
."({$hoge_db->table}.title LIKE \\1) OR "
."({$hoge_db->table}.description LIKE \\1) OR "
."({$hoge_db->table}.summary LIKE \\1) OR "
."({$hoge_db->table}.note LIKE \\1)",
$where );
}
return $where;
}
検索フックではなく(というかそんなの存在しない!)、is_search()メソッドで、検索かどうかをチェックするんか〜。
勉強になった!!
