検索キーワードにカスタムフィールドの値も使えるようにする。

wordpressでカスタムフィールドを使っているときに、カスタムフィールドの値が検索してもでてこなくて
どうしようか悩んだときのメモ

searcheverythingというプラグインもいいのですが、
それだと、or検索ができなくなってしまいます。

そこで、いろいろと調べていると、こちらのサイト非常に参考になりました!
続・WordPressの検索をカスタマイズしてみた|notnil creation weblog
functions.phpに以下のコードを書き足すだけで悩みは解決です。
細は上のリンクからご確認ください。
Takuro Hishikawaさん、本当にありがとうございました。

function my_search_join( $join, $query ) {
if ( is_admin() || ! $query->is_main_query() )
return $join;

global $wpdb;
if( $query->is_search() ) {
$join .= " LEFT JOIN $wpdb->postmeta ON "
. "$wpdb->posts.ID = $wpdb->postmeta.post_id ";
}
return $join;
}
function my_search_where( $where, $query ) {
if ( is_admin() || ! $query->is_main_query() )
return $where;

global $wpdb;
if ( $query->is_search() ) {
$where = preg_replace(
"/\(\s*$wpdb->posts\.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"($wpdb->posts.post_title LIKE $1) OR ($wpdb->postmeta.meta_value LIKE $1)",
$where
);
}
return $where;
}
add_filter( 'posts_join', 'my_search_join', 10, 2 );
add_filter( 'posts_where', 'my_search_where', 10, 2 );

ちなみにor検索をするのはfunctions.phpに以下のコードを追加

add_filter('posts_search', function($search) { return str_replace(')) AND ((', ')) OR ((', $search); });

コメントを残す