По-умолчанию в WordPress есть встроенный достаточно удобный поиск, который однако ищет только в заголовках записей и их содержимом. Если вы работаете с произвольными типами записей, то, скорее всего, используете произвольные поля для сохранения их атрибутов. Например, Свойство произвольного типа записи будет содержать произвольные поля: адрес, город и область. Можно попробовать использовать объект WP_Query с настройкой meta_query, но это не сработает. Если вы не будете использовать атрибут “s”, он перепишет стандартный поиск, а если используете, то не вернет желаемые результаты. Сниппет будет использовать фильтр posts_clauses для инъекции мета запроса, который совмещается со стандартным поисковым параметром WordPress.
Код сниппета
function custom_search_where($pieces) { // фильтр для выбора запроса поиска if (is_search() && !is_admin()) { global $wpdb; $custom_fields = array('field1','field2'); $keywords = explode(' ', get_query_var('s')); $query = ""; foreach ($custom_fields as $field) { foreach ($keywords as $word) { $query .= "((mypm1.meta_key = '".$field."')"; $query .= " AND (mypm1.meta_value LIKE '%{$word}%')) OR "; } } if (!empty($query)) { // add to where clause $pieces['where'] = str_replace("(((wp_posts.post_title LIKE '%", "( {$query} ((wp_posts.post_title LIKE '%", $pieces['where']); $pieces['join'] = $pieces['join'] . " INNER JOIN {$wpdb->postmeta} AS mypm1 ON ({$wpdb->posts}.ID = mypm1.post_id)"; } } return ($pieces); } add_filter('posts_clauses', 'custom_search_where', 20, 1);