【簡単】デフォルト検索にACFカスタムフィールドの値を含める方法【wordpress】

こんにちは、カスミです。
さて、以下のようなお悩みをお持ちでしょうか?
wordpress(ワードプレス)のデフォルト検索では、記事のタイトル、コンテンツ内のテキストに紐づいた検索結果がでるが、これにACFカスタムフィールドで設定した値も検索に含めたい。
このような悩みを解決致します。
本記事では、functions.phpにコードを追加し、デフォルト検索にACFカスタムフィールドで設定した値も含めるようにする方法について解説致します。
functions.phpにコードを記述
//-----------------------------------------------------
// 【ACFカスタムフィールドで設定した値を検索に追加】
//-----------------------------------------------------
function ACF_custom_searchadd( $where, $wp_query ) {
// ACFカスタムフィードのフィールド名を配列で入力します
$search_acf_add = array('address','hoge','hoge02');
global $wpdb;
if ( empty( $where )){
return $where;
}
$terms = $wp_query->query_vars[ 's' ];
$exploded_terms = explode( ' ', $terms );
if( $exploded_terms === FALSE || count( $exploded_terms ) == 0 ){
$exploded_terms = array( 0 => $terms );
}
$where = '';
foreach( $exploded_terms as $tag ) :
$where .= "
AND (
(".$wpdb->prefix."posts.post_title LIKE '%$tag%')
OR (".$wpdb->prefix."posts.post_content LIKE '%$tag%')
OR EXISTS (
SELECT * FROM ".$wpdb->prefix."postmeta
WHERE post_id = ".$wpdb->prefix."posts.ID
AND (";
foreach ($search_acf_add as $searcheable_acf) :
if ($searcheable_acf == $search_acf_add[0]):
$where .= " (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') ";
else :
$where .= " OR (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') ";
endif;
endforeach;
$where .= ")
)
OR EXISTS (
SELECT * FROM ".$wpdb->prefix."comments
WHERE comment_post_ID = ".$wpdb->prefix."posts.ID
AND comment_content LIKE '%$tag%'
)
OR EXISTS (
SELECT * FROM ".$wpdb->prefix."terms
INNER JOIN ".$wpdb->prefix."term_taxonomy
ON ".$wpdb->prefix."term_taxonomy.term_id = ".$wpdb->prefix."terms.term_id
INNER JOIN ".$wpdb->prefix."term_relationships
ON ".$wpdb->prefix."term_relationships.term_taxonomy_id = ".$wpdb->prefix."term_taxonomy.term_taxonomy_id
WHERE (
taxonomy = 'post_tag'
OR taxonomy = 'category'
OR taxonomy = 'myCustomTax'
)
AND object_id = ".$wpdb->prefix."posts.ID
AND ".$wpdb->prefix."terms.name LIKE '%$tag%'
)
)";
endforeach;
return $where;
}
add_filter( 'posts_search', 'ACF_custom_searchadd', 500, 2 );
上記コードをfunctions.phpにコピペしてください。
コピペしたら以下$search_acf_add変数内の配列に追加したいACFカスタムフィールドのフィールド名を入力します。
以上で実装完了です。
実際に検索してみて、ACFカスタムフィールドの値が検索結果に紐づいているか確認してみてください。
まとめ
住所で検索をかけたい時など、ACFカスタムフォールドに住所を入力し、上記方法を用いれば、簡単に住所検索が実装できます。
以上で解説を終わります。
目次