Advanced Custom Fields (ACF)は、任意の投稿やページにお好きなカスタムフィード(投稿に付随するパラメーター)を付与できてとても便利ですよね。
ただ、この値はそのままでは検索結果に反映されません。今回は任意のカスタムフィード値を検索結果に反映させる方法を解説いたします。
任意のカスタムフィード値がワードプレスの検索クエリに反映させる方法
下記のコードをワードプレスのテーマフォルダのfunctions.phpにコピペして保存されてください。
function ACF_custom_searchadd( $where, &$wp_query ) { // ここにACFのカスタムフィードのフィールド名をひとつずつ配列に入力します $list_searc_acf_add = array('フィールド名1','フィールド名2','フィールド名3'); 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 ($list_searc_acf_add as $searcheable_acf) : if ($searcheable_acf == $list_searc_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 );
反映させたいカスタムフィード値を設定
上記コードの
array(‘フィールド名1’,’フィールド名2’,’フィールド名3’);
という部分にキーワード検索に反映させる(検索対象に含めて考慮させる)値が入ったフィールド名をお好きなだけ入力されてください。
array(‘フィールド名1’,’フィールド名2’,’フィールド名3’,’フィールド名4’);
上記のようにいくつでも増やすことが可能です。
WordPress のカスタマイズ、プラグインのカスタマイズ、有効活用等のご相談ご依頼はお気軽にワードプレスドクターにお送りください